home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #6 / Amiga Plus CD - 2004 - No. 06.iso / AmiSoft / Mus / edit / AmySequencer.lha / AmySequencer / AmySequencer2.text < prev    next >
Text File  |  2004-04-23  |  305KB  |  7,777 lines

  1. ;-> AmySequencer2 by Stefano Maria Regattin
  2. ;d> 19 gennaio 2002 da AmySequencer
  3. ;m> 20,21,22,23,24,26,30,31 gennaio 2002
  4. ;m> 1,2,3,4,5,6,7,9,10,11,13,15,16,17,18,19,20,22,23,24,27,28 febbraio 2002
  5. ;m> 1,2,3,4,5,6,7,8,10,11,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,31 marzo 2002
  6. ;m> 1,2,4,5,6,8,9,10,11,13,14,19,20,21,22,24,25,28,29,30 aprile 2002
  7. ;m> 4,5,6,8,9,10,11,12,13,14,15,17,18 maggio 2002
  8. ;m> 12,14,15,16,17,20,22,23,28,30 giugno 2002
  9. ;m> 1,3,4,5,9,10,13,15,16 luglio 2002
  10. ;m> 10,13,14,23 agosto 2002
  11. ;m> 2,5,22 settembre 2002
  12. ;m> 8,9,12,16,17,18,20,21,22,23,24,25,26,28 ottobre 2002
  13. ;m> 4,5,6,7,9,12,13,18,19,21,23,25,29 novembre 2002
  14. ;m> 4,6,21,23,24,25,30 dicembre 2002
  15. ;m> 1,2,3,4,6,17,21 gennaio 2003
  16. ;m> 7,16 marzo 2003
  17. ;m> 5 aprile 2003
  18. ;m> 25 maggio 2003
  19. ;m> 9,12,13,14,15,16,17,18,21,22,23,24 giugno 2003
  20. ;m> 9,10,11,12,13,21,22,23,29 luglio 2003
  21. ;m> 10,30 agosto 2003
  22. ;m> 1,3,13,14,15 settembre 2003
  23. ;m> 5,11,12 ottobre 2003
  24. ;m> 12,15 novembre 2003
  25. ;m> 3,4,5,6,7,8,14,15,20,23 marzo 2004
  26. ;m> 19,20,21,22,23 aprile 2004
  27. ;------------------------------
  28.  
  29. ;----------------------------------------------------------------------
  30. ;le seguenti linee servono per la corretta gestione della versione del
  31. ; programma
  32. ;the following lines are for the correct handling of the program's version
  33. ;--------------------------------------------------------------------------
  34. JMP InizioDelProgramma
  35.  
  36. Dc.b "$VER: AmySequencer 0.21 (23.4.2004)"
  37. ;-----------------------
  38. ;versione del programma
  39. ;program version
  40. ;----------------
  41.  
  42. Even
  43.  
  44. ;program start
  45. InizioDelProgramma
  46.  
  47. ;------------------------------------------
  48. ;dati per i colori originali dello schermo
  49. ;original screen colours data
  50. ;-----------------------------
  51. Data.b 0,0,0
  52. Data.b 4,4,4
  53. Data.b 8,8,8
  54. Data.b 12,12,12
  55. Data.b 12,0,0
  56. Data.b 12,6,0
  57. Data.b 12,12,0
  58. Data.b 6,12,0
  59. Data.b 0,12,0
  60. Data.b 0,12,6
  61. Data.b 0,12,12
  62. Data.b 0,6,12
  63. Data.b 0,0,12
  64. Data.b 6,0,12
  65. Data.b 12,0,12
  66. Data.b 12,0,6
  67.  
  68. ;------------------------------------------------------------------------
  69. ;il seguente comando indica dove si trovano sul vostro computer i codici
  70. ; sorgenti di Blitz2 da includere in questo programma
  71. ;the following command states the place on your computer where are the Blitz2
  72. ; source codes to be included into this program
  73. ;-----------------------------------------------
  74. INCDIR "Lavoro:Linguaggi/Blitz/"
  75.  
  76. ;-------------------------------------------------------------------------
  77. ;questo comando inserisce una sola volta in questo punto del programma il
  78. ; codice sorgente specificato
  79. ;this command inserts one unique time in this point of the program the
  80. ; specified source code
  81. ;-----------------------
  82. XINCLUDE "MIDIConstants.bb2"
  83.  
  84. ;------------------------------------------------------------------------------
  85. ;le seguenti costanti servono per ricavare il periodo di un canale audio AMIGA
  86. ; dalla frequenza di campionamento; ce ne e' una per gli AMIGA PAL e una per
  87. ; quelli NTSC
  88. ;the following constants are used to obtain an AMIGA audio channel period from the
  89. ; sampling frequency; there is one for PAL AMIGAs and one for NTSC AMIGAs
  90. ;-------------------------------------------------------------------------
  91.  
  92. ;PAL timing
  93. #TemporizzazionePAL=3546895
  94.  
  95. ;NTSC timing
  96. #TemporizzazioneNTSC=3579545
  97.  
  98. ;-------------------------------------------------------------------------
  99. ;questa costante indica il numero di riferimento della fonte di caratteri
  100. ; Topaz8
  101. ;this constant states the characters font Topaz8 referring number
  102. ;-----------------------------------------------------------------
  103. #FonteDiCaratteriTopaz8=0
  104.  
  105. ;-------------------------------------------------------------------------
  106. ;questa variabile imposta il periodo minimo per i canali audio; il limite
  107. ; per i vecchi AMIGA e' 123, ma io ho scelto un periodo minimo di 125, che
  108. ; corrisponde ad un La nella nona ottava
  109. ;this variable sets the audio channels minimum period; on the oldest AMIGA the
  110. ; lowerst usable period is 123, but I have choosen minimum period of 125, that is
  111. ; the A note in the ninth octave
  112. ;--------------------------------
  113. #PeriodoMinimo=125
  114.  
  115. ;---------------------------------------------------------------------------
  116. ;questa costante indica il numero di riferimento della tavolozza dei colori
  117. ; disponibili
  118. ;this constant states the colour palette referring number
  119. ;---------------------------------------------------------
  120. #TavolozzaDeiColori=0
  121.  
  122. ;--------------------------------------------------
  123. ;le seguenti costanti indicano il tipo di finestra
  124. ;the following constants state the window's kind
  125. ;------------------------------------------------
  126.  
  127. ;window sizing gadget
  128. #BottoneRidimensionaFinestra=1
  129.  
  130. ;draggable window
  131. #FinestraMovibile=2
  132.  
  133. ;window depth gadget
  134. #BottoneNascondiFinestra=4
  135.  
  136. ;window close gadget
  137. #BottoneChiudiFinestra=8
  138.  
  139. ;sizing window right border (you must set gimme-zero-zero to use it)
  140. #BordoDestraFinestraRidimensionabile=16
  141.  
  142. ;sizing window bottom border (you must set gimme-zero-zero to use it)
  143. #BordoBassoFinestraRidimensionabile=32
  144.  
  145. ;backdrop window
  146. #FinestraDiSfondo=256
  147.  
  148. ;gimme-zero-zero window
  149. #FinestraConMemoriaSfondo=1024
  150.  
  151. ;borderless window
  152. #FinestraSenzaBordi=2048
  153.  
  154. ;window active
  155. #FinestraAttivata=4096
  156.  
  157. ;-------------------------------------------------
  158. ;le seguenti costanti indicano il tipo di bottoni
  159. ;the following constants state the gadgets' kind
  160. ;------------------------------------------------
  161.  
  162. ;invert
  163. #InvertiGadget=1
  164.  
  165. ;related to window's right side
  166. #PosizioneRelativaAllaDestraDellaFinestra=2
  167.  
  168. ;related to window'w bottom side
  169. #PosizioneRelativaAlBassoDellaFinestra=4
  170.  
  171. ;size as window's inner width
  172. #ComeLarghezzaInternaFinestra=8
  173.  
  174. ;size as window's inner height
  175. #ComeAltezzaInternaFinestra=16
  176.  
  177. ;box select
  178. #ScatolaDaSelezionare=32
  179.  
  180. ;horiziontal movement
  181. #MovimentoOrizzontale=64
  182.  
  183. ;vertical movement
  184. #MovimentoVerticale=128
  185.  
  186. ;no border
  187. #NessunBordo=256
  188.  
  189. ;exclude each other
  190. #SiEscludonoLUnLAltro=512
  191.  
  192. ;attach to window's right side
  193. #AttaccaAllaFinestraADestra=1024
  194.  
  195. ;attach to window's left side
  196. #AttaccaAllaFinestraASinistra=2048
  197.  
  198. ;attach to window's top
  199. #AttaccaAllaFinestraInAlto=4096
  200.  
  201. ;attach to window's bottom
  202. #AttaccaAllaFinestraInBasso=8192
  203.  
  204. ;gimme-zero-zero border gadget
  205. #GadgetConMemoriaBordo=16384
  206.  
  207. ;--------------------------------------------------------
  208. ;le seguenti costanti indicano gli eventi delle finestre
  209. ;the following constants state window events
  210. ;--------------------------------------------
  211.  
  212. ;you have pressed a mouse button
  213. #HaiPremutoUnTastoDelTopo=8
  214.  
  215. ;you have moved the mouse
  216. #HaiMossoIlTopo=16
  217.  
  218. ;you have pressed a gadget
  219. #HaiPremutoUnBottone=32
  220.  
  221. ;you have released a gadget
  222. #HaiRilasciatoUnBottone=64
  223.  
  224. ;you have activated the menu
  225. #HaiAttivatoIlMenu=256
  226.  
  227. ;you have closed the window
  228. #HaiChiusoLaFinestra=512
  229.  
  230. ;you have pressed a key
  231. #HaiPremutoUnTasto=1024
  232.  
  233. ;--------------------------------------------------------
  234. ;le seguenti costanti indicano i tasti cliccati del topo
  235. ;the following constants state the clicked mouse buttons
  236. ;--------------------------------------------------------
  237.  
  238. ;left mouse button pressed
  239. #TastoSinistroDelTopoPremuto=1
  240.  
  241. ;right mouse button pressed
  242. #TastoDestroDelTopoPremuto=2
  243.  
  244. ;both mouse buttons pressed
  245. #EntrambiITastiDelTopoPremuti=3
  246.  
  247. ;left mouse button released
  248. #TastoSinistroDelTopoRilasciato=5
  249.  
  250. ;right mouse button released
  251. #TastoDestroDelTopoRilasciato=6
  252.  
  253. ;both mouse buttons released
  254. #EntrambiITastiDelTopoRilasciati=7
  255.  
  256. ;-----------------------------------------------------------------------------
  257. ;le seguenti costanti indicano il valore ascii del tasti Backspace, Esc e dei
  258. ; tasti cursore
  259. ;the following constants state the ascii value for the Backspace, Esc and
  260. ; cursor keys
  261. ;-------------
  262. #Backspace=8
  263. #Escape=27
  264. #CursorUp=28
  265. #CursorDown=29
  266. #CursorRight=30
  267. #CursorLeft=31
  268.  
  269. ;-----------------------------------------------------------
  270. ;le seguenti costanti indicano i bottoni del joypad premuti
  271. ;the following constants state the joypad pressed buttons
  272. ;---------------------------------------------------------
  273. #_PlayB=1
  274. #_ReverseB=2
  275. #_ForwardB=4
  276. #_GreenB=8
  277. #_YellowB=16
  278. #_RedB=32
  279. #_BlueB=64
  280.  
  281. ;-------------------------------------------------------------------------
  282. ;le seguenti costanti indicano la direzione scelta con il joystick/joypad
  283. ;the following constants state the choosen direction by joystick/joypad
  284. ;-----------------------------------------------------------------------
  285. #JoyMovedUp=0
  286. #JoyMovedRight=2
  287. #JoyMovedDown=4
  288. #JoyMovedLeft=6
  289. #JoyNotMoved=8
  290.  
  291. ;screen
  292. #Schermo=0
  293.  
  294. ;main window
  295. #FinestraPrincipale=0
  296.  
  297. ;main window's gadget list
  298. #ListaGadgetPrincipale=0
  299.  
  300. ;main window's menu list
  301. #ListaMenuPrincipale=0
  302.  
  303. ;sounds editor window
  304. #FinestraEditoreSuoni=1
  305.  
  306. ;sounds editor window's gadget list
  307. #ListaGadgetEditoreSuoni=1
  308.  
  309. ;sound editor window's menu list
  310. #ListaMenuEditoreSuoni=1
  311.  
  312. ;notes editor window
  313. #FinestraEditoreSequenza=2
  314.  
  315. ;notes editor window's gadget list
  316. #ListaGadgetEditoreSequenza=2
  317.  
  318. ;notes editor window's menu list
  319. #ListaMenuEditoreSequenza=2
  320.  
  321. ;note editor window's zonetable
  322. #TabellaZoneEditoreSequenza=0
  323.  
  324. ;window to change basic note length
  325. #FinestraCambioEventoBase=3
  326.  
  327. ;basic note length change window's gadget list
  328. #ListaGadgetCambioEventoBase=3
  329.  
  330. ;slider editore suoni, valore utile qualsiasi maggiore di zero
  331. ;sounds editor's slider, useful value any greater than zero
  332. #SliderEditoreSuoni=1
  333.  
  334. ;basic note change window's zonetable
  335. #TabellaZoneCambioEventoBase=1
  336.  
  337. ;background pic's bitmap
  338. #BitmapImmagineDiSfondo=0
  339.  
  340. ;-------------------------------------------------------------------------
  341. ;queste costanti indicano i cambiamenti che possono essere applicati agli
  342. ; eventi musicali
  343. ;these constants states different changes that can be applied to musical
  344. ; events
  345. ;--------
  346.  
  347. ;select a musical event
  348. #SelezionaUnEventoMusicale=0
  349.  
  350. ;change the channel of the selected musical events
  351. #CambiaIlCanaleDegliEventiMusicaliSelezionati=1
  352.  
  353. ;increase by one the value of the selected musical events
  354. #AlzaDiUnoGliEventiMusicaliSelezionati=2
  355.  
  356. ;decrease by one the value of the selected musical events
  357. #AbbassaDiUnoGliEventiMusicaliSelezionati=3
  358.  
  359. ;move forward the selected musical events
  360. #SpostaAvantiNelTempoGliEventiMusicaliSelezionati=4
  361.  
  362. ;move backward the selected musical events
  363. #SpostaIndietroNelTempoGliEventiMusicaliSelezionati=5
  364.  
  365. ;delete the selected musical events
  366. #EliminaGliEventiMusicaliSelezionati=6
  367.  
  368. ;select all the musical events
  369. #SelezionaTuttiGliEventiMusicali=7
  370.  
  371. ;deselect all the musical events
  372. #DeselezionaTuttiGliEventiMusicali=8
  373.  
  374. ;toggle selection of all musical events
  375. #InvertiLaSelezioneDiTuttiGliEventiMusicali=9
  376.  
  377. ;cut all the selected musical events
  378. #TagliaGliEventiMusicaliSelezionati=10
  379.  
  380. ;copy all the selected musical events
  381. #CopiaGliEventiMusicaliSelezionati=11
  382.  
  383. ;paste the previous cutted or copied musical events
  384. #IncollaGliEventiMusicali=12
  385.  
  386. ;forget the previous cutted or copied musical events
  387. #DimenticaGliEventiMusicaliTagliatiOCopiati=13
  388.  
  389. ;select same kind's musical events with the same channel
  390. #SelezionaGliEventiMusicaliUguali=14
  391.  
  392. ;add 8 to the event value of the selected musical events that are not notes
  393. ; and are not beats per minute
  394. #AggiungiOttoAgliEventiMusicaliSelezionati=15
  395.  
  396. ;sub 8 to the event value of the selected musical events that are not notes
  397. ; and are not beats per minute
  398. #SottraiOttoAgliEventiMusicaliSelezionati=16
  399.  
  400. ;add 10 to the event value of the selected beats per minute (BPM) events
  401. #AggiungiDieciAgliEventiMusicaliSelezionati=17
  402.  
  403. ;sub 10 to the event value of the selected beats per minute (BPM) events
  404. #SottraiDieciAgliEventiMusicaliSelezionati=18
  405.  
  406. ;put up of one octave the selected notes
  407. #AlzaDiUnOttavaLeNoteSelezionate=19
  408.  
  409. ;put down of one octave the selected notes
  410. #AbbassaDiUnOttavaLeNoteSelezionate=20
  411.  
  412. ;change the value of the selected musical events, that is velocity for notes
  413. #CambiaIlValoreDegliEventiMusicaliSelezionati=21
  414.  
  415. ;increase the selected notes length
  416. #AllungaLaDurataDelleNoteSelezionate=22
  417.  
  418. ;decrease the selected notes length
  419. #RiduciLaDurataDelleNoteSelezionate=23
  420.  
  421. ;add a beat to the selected time signature events
  422. #AggiungiUnBattitoAlTempoSelezionato=24
  423.  
  424. ;sub a beat to the selected time signature events
  425. #TogliUnBattitoAlTempoSelezionato=25
  426.  
  427. ;add a measure to the selected time signature events
  428. #AggiungiUnaMisuraAlTempoSelezionato=26
  429.  
  430. ;sub a measure to the selected time signature events
  431. #TogliUnaMisuraAlTempoSelezionato=27
  432.  
  433. ;go to the insertion point
  434. #VaiAlPuntoDInserimento=28
  435.  
  436. ;-----------------------------------------------------------------------------
  437. ;le seguenti costanti indicano il modo di disegno delle sequenze visualizzate
  438. ;the following constants state the displayed sequences drawing mode
  439. ;-------------------------------------------------------------------
  440.  
  441. ;unselected sequence
  442. #SequenzaNonSelezionata=0
  443.  
  444. ;selected sequence
  445. #SequenzaSelezionata=1
  446.  
  447. ;highlighted sequence
  448. #SequenzaEvidenziata=2
  449.  
  450. ;----------------------------------------------------------------------------
  451. ;le seguenti costanti indicano lo stato che un evento musicale puo' assumere
  452. ;the following constants state the status that a musical event can be
  453. ;---------------------------------------------------------------------
  454.  
  455. ;unselected musical event
  456. #EventoMusicaleNonSelezionato=0
  457.  
  458. ;selected musical event
  459. #EventoMusicaleSelezionato=1
  460.  
  461. ;cutted musical event
  462. #EventoMusicaleTagliato=2
  463.  
  464. ;copied musical event
  465. #EventoMusicaleCopiato=4
  466.  
  467. ;played musical event
  468. #EventoMusicaleEseguito=8
  469.  
  470. ;ended musical event
  471. #EventoMusicaleTerminato=16
  472.  
  473. ;----------------------------------------------
  474. ;queste costanti indicano come suonare le note
  475. ;these constants state how to play notes
  476. ;----------------------------------------
  477.  
  478. ;play events from the main window
  479. #EseguiGliEventiMusicaliDallaFinestraPrincipale=0
  480.  
  481. ;play events from the sequence editor
  482. #EseguiGliEventiMusicaliDallEditoreSequenza=1
  483.  
  484. ;---------------------------------------------------------------------------
  485. ;le seguenti costanti sono usate dal comando WJam per la selezione del modo
  486. ; grafico
  487. ;the following constants are used by WJam command for the graphic mode
  488. ; selection
  489. ;-----------
  490.  
  491. ;one colour with transparent background
  492. #UnColoreConSfondoTrasparente=0
  493.  
  494. ;two colours with full background
  495. #DueColoriConSfondoPieno=1
  496.  
  497. ;second time same colour
  498. #SecondaVoltaStessoColore=2
  499.  
  500. ;--------------------------------------------------------------
  501. ;le seguenti costanti indicano il tempo base che e' 4/4, cioe'
  502. ; #BattitiDiBase/#MisureDiBase
  503. ;the following constants states the basic time that is 4/4, that is
  504. ; #BattitiDiBase/#MisureDiBase
  505. ;------------------------------
  506.  
  507. ;basic beats
  508. #BattitiDiBase=4
  509.  
  510. ;basic measures
  511. #MisureDiBase=4
  512.  
  513. ;basic ticks per quarter note
  514. #TicDiBasePerQuarto=192
  515.  
  516. ;basic ticks per sixtyfourth note
  517. #TicDiBasePerSessantaquattresimo=#TicDiBasePerQuarto/16
  518.  
  519. ;tracks maximum
  520. #MassimoTracce=1024
  521.  
  522. ;sequences maximum
  523. #MassimoSequenze=32768
  524.  
  525. #LarghezzaPulsantiEditoreSequenza=16*16+5*8
  526.  
  527. ;------------------------
  528. ;File identifier numbers
  529. ;------------------------
  530.  
  531. ;MIDI Files history
  532. #StoriaDeiFileMIDI=0
  533.  
  534. ;MIDI file to load
  535. #FileMIDIDaCaricare=0
  536.  
  537. ;          font height, notes invisible area,   selected channel, note increment y, basic event,musical event moved by mouse
  538. DEFTYPE .b AltezzaFonte,AreaInvisibileDelleNote,CanaleSelezionato,IncrementoYNota,  EventoBase, EventoMusicaleSpostatoConIlTopo
  539.  
  540. ;          speech enabled, clicked mouse key,   ticks per beat
  541. DEFTYPE .b ParlatoAttivato,TastoDelTopoCliccato,TicPerBattito
  542.  
  543. ;          visible tracks,AMIGA voice off,visible area start y
  544. DEFTYPE .b TracceVisibili,VoceSpenta,     YInizioAreaVisibile
  545.  
  546. ;          editor window inner height,           editor window inner width
  547. DEFTYPE .w AltezzaInternaFinestraEditoreSequenza,LarghezzaInternaFinestraEditoreSequenza
  548.  
  549. ;          main window inner height,        main window inner width
  550. DEFTYPE .w AltezzaInternaFinestraPrincipale,LarghezzaInternaFinestraPrincipale
  551.  
  552. ;          screen height, values visible area,  Active channels,screen height,   slider width, bars per mins backgroun
  553. DEFTYPE .w AltezzaSchermo,AreaVisibileDeiValori,CanaliAttivati,LarghezzaSchermo,XLunSlider,    XPosSfondoBattutePerMinuto
  554.  
  555. ;          mouse x, slider height, tempo background y, bars per mins background y, mouse y
  556. DEFTYPE .w XTopo,   YLunSlider,    YPosSfondoTempo,    YPosSfondoBattutePerMinuto, YTopo
  557.  
  558. ;          time invisible area,   sequence duration,events,selected events,  MIDI enabled,insertion point,  visible area start x
  559. DEFTYPE .l AreaInvisibileDelTempo,DurataSequenza,   Eventi,EventiSelezionati,MIDIAttivato,PuntoDInserimento,XInizioAreaVisibile
  560.  
  561. ;-----
  562. ;keys
  563. ;-----
  564.  
  565. ;backspace key
  566. TastoBackspace$=Chr$(#Backspace)
  567.  
  568. ;escape key
  569. TastoFuga$=Chr$(#Escape)
  570.  
  571. ;cursor up key
  572. TastoCursoreSu$=Chr$(#CursorUp)
  573.  
  574. ;cursor down key
  575. TastoCursoreGiu$=Chr$(#CursorDown)
  576.  
  577. ;cursor right key
  578. TastoCursoreDestra$=Chr$(#CursorRight)
  579.  
  580. ;cursor left key
  581. TastoCursoreSinistra$=Chr$(#CursorLeft)
  582.  
  583. ;space key
  584. Spazio$=" "
  585.  
  586. ;----------------------------------------------------------
  587. ;questa variabile riporta la parte non visibile del motivo
  588. ;this variable reports the non visible motive area
  589. ;--------------------------------------------------
  590. AreaInvisibileDelMotivo.l=0
  591.  
  592. ;-----------------------------------------------------------------------------
  593. ;questa variabile indica la velocita' di esecuzione delle note, indicata come
  594. ; battute al minuto
  595. ;this variable states the notes execution velocity, stated as bars per minute
  596. ;-----------------------------------------------------------------------------
  597. BattutePerMinuto.w=120
  598.  
  599. ;-----------------------------------------------------
  600. ;questa variabile indica i battiti correnti del tempo
  601. ;this variable states the time's current beats
  602. ;----------------------------------------------
  603. Battiti.b=#BattitiDiBase
  604.  
  605. ;----------------------------------------------------------------------------
  606. ;la seguente variabile permette la selezione delle due diverse tavolozze dei
  607. ; colori; se vera (true), i colori saranno quelli originali, se falsa (false)
  608. ; saranno quelli dell'immagine di sfondo a colori
  609. ;the following variable permits the selection of the two different colour
  610. ; palettes; if true the colours will be as original, if false they will be
  611. ; the ones from the coloured pic
  612. ;--------------------------------
  613. ColoriOriginali.b=False
  614.  
  615. ;----------------------------------------------------------------------------
  616. ;questa costante indica il valore per cui bisogna moltiplicare o dividere la
  617. ; frequenza della nota per ricavare rispettivamente la nota successiva o la
  618. ; nota precedente e corrisponde a 2^(1/12), cioe' la radice dodicesima di 2
  619. ;this constant states the value witch it must moltiply or divide the note
  620. ; frequency to obtain respectively the following note or the previous note and
  621. ; corresponds to 2^(1/12), that is the twelfth root of 2
  622. ;--------------------------------------------------------
  623. DistanzaSemitono.f=1.05946309
  624.  
  625. ;------------------------------------------------------------------------------
  626. ;questa variabile, diventando vera (true), vi permette di uscire dal programma
  627. ;this variable, becaming True, let you exit from the program
  628. ;------------------------------------------------------------
  629. EsciDalProgramma.b=False
  630.  
  631. EventoMusicaleSelezionato.w=0
  632. ;----------------------------------------------------------------------------
  633. ;questa variabile viene usata solo dalla procedura di selezione degli eventi
  634. ; musicali e il suo valore viene usato per la selezione degli eventi uguali.
  635. ;this variable is used only by the musical events selection procedure and its
  636. ; value is used by the alike musical events selection.
  637. ;------------------------------------------------------
  638.  
  639. ;------------------------------------------
  640. ;questa variabile indica la fine del brano
  641. ;this variable states song end
  642. ;------------------------------
  643. FineMotivo.l=0
  644.  
  645. ;------------------------------------------------------------------
  646. ;questa variabile indica se e' stata aperta la finestra principale
  647. ;this flag states if the main window is opened
  648. ;----------------------------------------------
  649. FinestraPrincipaleAperta.b=False
  650.  
  651. ;------------------------------------------------------------------------------
  652. ;Questa variabile indica la larghezza di base delle note; puo' essere cambiata
  653. ; secondo i bisogni del momento
  654. ;This variable states the basic notes width; it can be changed depending of
  655. ; the needs of the moment
  656. ;-------------------------
  657. LarghezzaEventoBase.w=#TicDiBasePerQuarto
  658.  
  659. ;-----------------------------------------------------
  660. ;questa variabile indica le misure correnti del tempo
  661. ;this variable states the time's current measures
  662. ;-------------------------------------------------
  663. Misure.w=#MisureDiBase
  664.  
  665. ;--------------------------------------------------------------------------
  666. ;questa variabile indica se gli eventi musicali dello stesso canale devono
  667. ; essere mostrati da soli nell'editore sequenza
  668. ;this variable states if the same channel musical events must be shown alone
  669. ; in the sequence editor
  670. ;------------------------
  671. MostraSoloGliEventiMusicaliDelCanaleSelezionato.b=False
  672.  
  673. ;------------------------------------------------------------------------
  674. ;questa variabile indica se gli eventi musicali dello stesso tipo devono
  675. ; essere mostrati da soli nell'editore sequenza
  676. ;this variable states if the same kind musical events must be shown alone in
  677. ; the sequence editor
  678. ;---------------------
  679. MostraSoloGliEventiMusicaliDelloStessoTipo.b=False
  680.  
  681. ;----------------------------------------------------------------------------
  682. ;questa variabile indica se deve essere mostrato il nuovo valore dell'evento
  683. ; selezionato mosso con il mouse
  684. ;this variable states if the new value of the selected event dragged by mouse
  685. ; must be showed or not
  686. ;-----------------------
  687. MostraNuovoValore.b=False
  688.  
  689. ;---------------------------------------------------------------------------
  690. ;questa variabile sara' maggiore di zero se una nota non e' stata terminata
  691. ;this variable will be greater than zero if one or more notes have not been
  692. ; terminated
  693. ;------------
  694. NoteSuonate.l=0
  695.  
  696. ;--------------------------------------------------------------------
  697. ;questa variabile indica l'ottava visualizzata nell'editore sequenza
  698. ;this variable states the visualized octave in the sequence editor
  699. ;------------------------------------------------------------------
  700. OttavaSelezionata.b=#_MiddleC/12
  701.  
  702. ;--------------------------------------------------------------------------
  703. ;questa variabile indica la scala di visualizzazione delgi eventi musicali
  704. ; dell'editore sequenza
  705. ;this variable states the musical events visualization scale of the sequence
  706. ; editor
  707. ;--------
  708. ScalaEventiMusicali.w=1
  709.  
  710. ;-------------------------------------------------------------------
  711. ;Questa variabile indica il numero massimo della sequenza da creare
  712. ;This variable states the maximum number of the sequence to create
  713. ;------------------------------------------------------------------
  714. SequenzaMassimaDaCreare.l=1
  715.  
  716. ;--------------------------------------------------------------------------
  717. ;questa variabile indica la sequenza selezionata; se contiene zero nessuna
  718. ; sequenza e' selezionata, altrimenti contiene il numero positivo che
  719. ; identifica la sequenza
  720. ;this variable states the selected sequence; if retains zero no sequence is
  721. ; selected, otherwise retain the positive number that identifies the sequence
  722. ;-----------------------------------------------------------------------------
  723. SequenzaSelezionata.l=0
  724.  
  725. ;-------------------------------------------------------------------------
  726. ;questa variabile indica se la lista degli ultimi 5 file midi caricati e'
  727. ; stata scritta
  728. ;this flag states if the last 5 loaded MIDI files list has been written
  729. ;-----------------------------------------------------------------------
  730. StoriaDeiFileMIDIAperti.b=False
  731.  
  732. ;------------------------------------------------------------------------------
  733. ;La nota base, il quarto, corrisponde a 192 tic; questa costante indica quanti
  734. ; tic passano in un 50mo di secondo per un tempo di 120 battute per minuto
  735. ;The basic note, the quarter, corresponds to 192 ticks; this constant signs
  736. ; how many ticks takes passes in a 50th of a second for a time of 120 measures
  737. ; per minutes
  738. ;-------------
  739. TicPerCinquantesimoDiSecondo.f=30.72
  740.  
  741. ;--------------------------------------------------------------------------
  742. ;la seguente variabile stringa indica il tipo di evento musicale corrente;
  743. ; all'inizio e' impostata sull'evento nota
  744. ;the following string variable states the current musical event; at the
  745. ; beginning is set on the note event
  746. ;------------------------------------
  747. TipoDiEventoMusicaleDiBase$="Note"
  748.  
  749. ;------------------------------------------------------------------------------
  750. ;questa variabile indica per le note la velocita' di base e per i controlli il
  751. ; valore di base; valore utile da zero a 127
  752. ;this variable states for the notes the basic velocity and for the controls
  753. ; the basic value; useful value from zero to 127
  754. ;------------------------------------------------
  755. ValoreEventoBase.b=64
  756.  
  757. ;-----------------------------------------------------------------------
  758. ;questa variabile indica la posizione della voce Quit del menu' Project
  759. ;this variable marks the position of voice Quit in the Project menu
  760. ;-------------------------------------------------------------------
  761. VoceMenuEsci.b=4
  762.  
  763. ;-------------------------------------------------------------------------
  764. ;questa variabile indica la voce dell'AMIGA che non e' attiva; ogni "uno"
  765. ; corrisponde ad una voce di Amiga
  766. ;this variable states the Amiga voice that is not active; each "one" is
  767. ; related to an AMIGA voice
  768. ;---------------------------
  769. VoceSpenta=%1111
  770.  
  771. ;---------------------------------------------------------------------------
  772. ;questa variabile indica la posizione d'inizio per la visualizzazione delle
  773. ; tracce
  774. ;this variables states the start position for the tracks displacement
  775. ;---------------------------------------------------------------------
  776. XTracceVisibili.l=0
  777.  
  778. ;------------------------------------------------------------
  779. ;questa variabile memorizza la prima traccia da visualizzare
  780. ;this variable stores the first track to be displayed
  781. ;-----------------------------------------------------
  782. YTracceVisibili.w=0
  783.  
  784. ;---------------------------------------------------------------------------
  785. ;queste cinque variabili indicizzate conterranno i nomi degli ultimi 5 file
  786. ; MIDI caricati
  787. ;this five indexed variables will keep names of last 5 loaded MIDI files
  788. ;------------------------------------------------------------------------
  789. Dim FileMIDIAperto$(4)
  790.  
  791. ;-----------------------------------------------------------------------------
  792. ;questa struttura di variabili e' una tabella di riferimento per il periodo e
  793. ; la frequenza associati ad ognuna delle 128 note possibili
  794. ;this variables structure is a refferring table for the periode and frequency
  795. ; paired to every one of the 128 given notes
  796. ;--------------------------------------------
  797. NEWTYPE .PeriFreq
  798.  
  799. ;--------
  800. ;periode
  801. ;--------
  802.  Periodo.l
  803.  
  804. ;----------
  805. ;frequency
  806. ;----------
  807.  Frequenza.f
  808. End NEWTYPE
  809. Dim PeriFreq.PeriFreq(127)
  810.  
  811. ;--------------------------------------------------------------------------
  812. ;la seguente struttura di variabili serve per identificare il tipo di note
  813. ;the following variables structure is used to states the notes kind
  814. ;-------------------------------------------------------------------
  815. NEWTYPE .TipoDiNota
  816.  
  817. ;note italian name
  818.  NomeItaliano$
  819.  
  820. ;note english name
  821.  NomeInglese$
  822.  
  823. ;diesis flag
  824.  Diesis.b
  825.  
  826. ;note octave
  827.  Ottava.b
  828. End NEWTYPE
  829. Dim TipoDiNota.TipoDiNota(127)
  830.  
  831. ;----------------------------------------------------------------------------
  832. ;la seguente struttura di variabili e' per la gestione dei suoni per l'AMIGA
  833. ;the following variables structure is for AMIGA sounds management
  834. ;-----------------------------------------------------------------
  835. NEWTYPE .Suono
  836.  
  837. ;---------------------------------------------------
  838. ;questa variabile indica il nome del suono caricato
  839. ;this variable states the name of the loaded sound
  840. ;--------------------------------------------------
  841.  Nome$
  842.  
  843. ;----------------------------------------------------------------------------
  844. ;questa variabile indica il canale associato al suono caricato; valore utile
  845. ; da 1 a 16, o zero se nessun canale e' associato al suono
  846. ;this variable states the channel linked to the loaded sound; useful value
  847. ; from 1 to 16, or zero if no channel is assigned to the sound
  848. ;--------------------------------------------------------------
  849.  Canale.b
  850.  
  851. End NEWTYPE
  852. Dim Suono.Suono(31)
  853.  
  854. NEWTYPE .Sequenza
  855.  
  856. ;--------------------------------------------------
  857. ;questa variabile memorizza il nome della sequenza
  858. ;this variable stores the sequence name
  859. ;---------------------------------------
  860. Nome$
  861.  
  862. ;-----------------------------------------------------------
  863. ;questa variabile indica la durata temporale della sequenza
  864. ;this variable states the sequence time duration
  865. ;------------------------------------------------
  866. Durata.l
  867.  
  868. ;------------------------------------------------------------------
  869. ;questa variabile indica gli eventi musicali totali della sequenza
  870. ;this variable states the sequence's total musical events
  871. ;---------------------------------------------------------
  872. EventiMusicali.l
  873.  
  874. ;-----------------------------------------------------------------------
  875. ;questa variabile indica gli eventi musicali selezionati della sequenza
  876. ;this variable states the sequence's selected musical events
  877. ;------------------------------------------------------------
  878. EventiMusicaliSelezionati.l
  879.  
  880. End NEWTYPE
  881. Dim List Sequenza.Sequenza(#MassimoSequenze-1)
  882.  
  883. NEWTYPE .SequenzaNellaTraccia
  884.  
  885. ;----------------------------------------------------
  886. ;questa variabile memorizza il numero della sequenza
  887. ;this variable stores the sequence number
  888. ;-----------------------------------------
  889. Sequenza.l
  890.  
  891. ;----------------------------------------------------------
  892. ;questa variabile indica l'inizio temporale della sequenza
  893. ;this variable states the sequence time start
  894. ;---------------------------------------------
  895. Inizio.l
  896.  
  897. ;------------------------------------------------------------------
  898. ;questa variabile indica la traccia di appartenenza della sequenza
  899. ;this variable states the the track of the sequence
  900. ;---------------------------------------------------
  901. Traccia.w
  902.  
  903. ;------------------------------------------------------------
  904. ;questa variabile indica se la sequenza e' genitore o figlia
  905. ;this variable states if the sequence is parent or daughter
  906. ;-----------------------------------------------------------
  907. Genitore.l
  908.  
  909. End NEWTYPE
  910. Dim List SequenzaNellaTraccia.SequenzaNellaTraccia(#MassimoSequenze-1)
  911.  
  912. ;existing sequence
  913. Dim SequenzaEsistente.b(#MassimoSequenze-1)
  914.  
  915. ;------------------------------------------------------------------------
  916. ;queste variabili indicizzate indicano True (Vero) se la traccia esiste,
  917. ; altrimenti indicano False (Falso)
  918. ;these indexed variables (arrays) state True if track exist, otherwise state
  919. ; False
  920. ;-------
  921. Dim Traccia.b(#MassimoTracce-1)
  922.  
  923. ;----------------------------------------------------------------------------
  924. ;la seguente struttura di variabili e' per la gestione degli eventi musicali
  925. ;the following vars structure is for the musical events management
  926. ;------------------------------------------------------------------
  927. NEWTYPE .EventoMusicale
  928.  
  929. ;----------------------------------------------------------------------------
  930. ;questa variabile stringa indica il tipo di evento musicale, che puo' essere
  931. ; una nota od un parametro MIDI
  932. ;This string variable states the musical event kind, that can be a note or a
  933. ; MIDI parameter
  934. ;----------------
  935.  Tipo$
  936.  
  937. ;-----------------------------------------------------------------------
  938. ;se l'evento musicale e' una nota, questa variabile ne indica l'altezza;
  939. ; valore utile da zero a 127
  940. ;if the event is a note, this variable states its height; useful value from
  941. ;zero to 127
  942. ;------------
  943.  Evento.b
  944.  
  945. ;--------------------------------------------------------------------------
  946. ;se l'evento musicale e'una nota, questa variabile ne indica l'intensita',
  947. ;cioe' il suo volume; se invece l'evento e' un controllo ne indica il valore
  948. ;if the musical event is a note, this variable states its intensity, that is
  949. ; its volume; if instead it is a control it states its value
  950. ;------------------------------------------------------------
  951.  Valore.b
  952.  
  953. ;----------------------------------------------------------------------------
  954. ;questa variabile indica la posizione dell'evento musicale nel tempo in tic;
  955. ; valore utile da zero a 2 miliardi e rotti
  956. ;this variable states musical event position in time by ticks; useful value
  957. ;from zero to over 2 billions
  958. ;-----------------------------
  959.  Inizio.l
  960.  
  961. ;------------------------------------------------------------------------------
  962. ;se l'evento musicale e' una nota, questa variabile ne indica in tic la durata
  963. ; nel tempo; valore utile da 0 a 2 miliardi e rotti (192 tic=nota di un quarto)
  964. ;if the event is a note, this variable states its duration in time by ticks;
  965. ;useful value from zero to over 2 billions (192 ticks=a quarter note)
  966. ;---------------------------------------------------------------------
  967.  Durata.l
  968.  
  969. ;------------------------------------------------------------------------------
  970. ;questa varibile indica il canale dell'evento musicale; valore utile da 1 a 16
  971. ;this variable states musical event's channel; useful value from 1 to 16
  972. ;------------------------------------------------------------------------
  973.  Canale.b
  974.  
  975. ;-----------------------------------------------------------------------------
  976. ;questa variabile identifica la sequenza di appartenenza dell'evento musicale
  977. ; valore utile da 1 a 32768
  978. ;this variable states the sequence witch the musical event belong to: useful
  979. ; value from 1 to 32768
  980. ;-----------------------
  981.  Sequenza.l
  982.  
  983. ;----------------------------------------------------------------------------
  984. ;questa variabile indica se l'evento musicale e' stato selezionato, tagliato
  985. ; copiato, eseguito o terminato, piu' precisamente:
  986. ; 0=evento non selezionato
  987. ; 1=evento selezionato
  988. ; +2=evento tagliato
  989. ; +4=evento copiato
  990. ; +8=evento eseguito
  991. ; +16=evento terminato
  992. ;this variable states if the musical event has been selected, cutted, copied
  993. ; executed or terminated, more precisely:
  994. ; 0=unselected event
  995. ; 1=selected event
  996. ; +2=cutted event
  997. ; +4=copied event
  998. ; +8=executed event
  999. ; +16=ended event
  1000. ;-----------------
  1001.  Stato.b
  1002.  
  1003. End NEWTYPE
  1004.  
  1005. DEFTYPE .EventoMusicale NotaSuonata
  1006.  
  1007. ;-----------------------------------------------------
  1008. ;imposta il numero massimo di eventi musicali usabili
  1009. ;sets the maximun musical events handling
  1010. ;-----------------------------------------
  1011. MassimoEventiMusicali.l=Min((FastFree-65536)/SizeOf .EventoMusicale,32768)
  1012.  
  1013. ;---------------------------------------------------------------------------
  1014. ;crea le variabili array lista con la struttura del NEWTYPE .EventoMusicale
  1015. ;creates the list array variables with the NEWTYPE .EventoMusicale structure
  1016. ;----------------------------------------------------------------------------
  1017. Dim List EventoMusicale.EventoMusicale(MassimoEventiMusicali-1)
  1018.  
  1019. ;-----------------------------------------------------------------
  1020. ;questa variabile indica se e' stato attivato un dispositivo MIDI
  1021. ;this variable states if a MIDI device has been activated
  1022. ;---------------------------------------------------------
  1023. MIDIAttivato.l=0
  1024.  
  1025. ;------------------------------------------------------------------------------
  1026. ;questa variabile indica se si entra nell'editore sequenza per la prima volta,
  1027. ; per mostrare i requester che riportano i tasti utili
  1028. ;this variable states if you enters in the sequence editor for the first time,
  1029. ; to show the requesters that report the useful keys
  1030. ;----------------------------------------------------
  1031. PrimaVoltaNellEditoreSequenza.b=True
  1032.  
  1033. ;--------------------------------------------------------------------------
  1034. ;questa procedura imposta la fonte di caratteri Topaz8 per schermo, menu e
  1035. ; requester, ma non per le finestre
  1036. ;this procedure sets the characters font Topaz8 for screen, menus and
  1037. ; requester, but not for windows
  1038. ;--------------------------------
  1039. Statement CaricaLaFonteDiCaratteriTopaz8{}
  1040. SHARED AltezzaFonte
  1041.  AltezzaFonte=8:LoadFont #FonteDiCaratteriTopaz8,"topaz.font",AltezzaFonte
  1042. End Statement
  1043.  
  1044. ;------------------------------------------------------------
  1045. ;questa procedura imposta il parlato dell'AMIGA se possibile
  1046. ;this procedure sets the AMIGA speech if it is possible
  1047. ;-------------------------------------------------------
  1048. Statement ImpostaIlParlatoDellAmiga{}
  1049. SHARED ParlatoAttivato
  1050.  If Exists("LIBS:translator.library") AND Exists("DEVS:narrator.device")
  1051.   SetVoice 130,250,0,1,64,22200
  1052.   Speak "Speech is enabled!"
  1053.   ParlatoAttivato=True
  1054.  Else
  1055.   Messaggio$="Unable to set speech,|"
  1056.   Messaggio$+"required files:|"
  1057.   Messaggio$+"LIBS:translator.library|"
  1058.   Messaggio$+"DEVS:narrator.device|"
  1059.   Messaggio$+"These are supplied with|"
  1060.   Messaggio$+"the workbench 1.2|"
  1061.   Messaggio$+"Search on Aminet their|"
  1062.   Messaggio$+"third part improvement|"
  1063.   EZRequest "AmySequencer message",Messaggio$,"OK"
  1064.   ParlatoAttivato=False
  1065.  EndIf
  1066. End Statement
  1067.  
  1068. ;-----------------------------------------------
  1069. ;questa procedura carica le immagini delle note
  1070. ;this procedure loads the note images
  1071. ;-------------------------------------
  1072. Statement CaricaLeImmaginiDelleNote{}
  1073.  BitMap 0,126,16,1
  1074.  LoadBitMap 0,"Notes.2Cols"
  1075.  GetaShape 0,0,0,22,16
  1076.  GetaShape 1,23,0,12,16
  1077.  GetaShape 2,36,0,12,16
  1078.  GetaShape 3,49,0,17,16
  1079.  GetaShape 4,67,0,17,16
  1080.  GetaShape 5,85,0,17,16
  1081.  GetaShape 6,103,0,17,16
  1082.  GetaShape 7,121,0,6,16
  1083.  Free BitMap 0
  1084. End Statement
  1085.  
  1086. ;----------------------------------------------
  1087. ;questa procedura attiva la comunicazione MIDI
  1088. ;this procedure activates the MIDI communication
  1089. ;------------------------------------------------
  1090. Statement AttivaMIDI{}
  1091. SHARED MIDIAttivato
  1092. SHARED Spazio$
  1093.  Use Window #FinestraPrincipale
  1094.  WJam #DueColoriConSfondoPieno
  1095.  Repeat
  1096.   If MIDIAttivato=True Then CloseSerial 0
  1097.   WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1098.   WLocate 0,0:WColour 3,0:Print "Please type your MIDI device name>"
  1099.   DispositivoMIDI$=StripLead$(StripTrail$(Edit$("serial.device",35),Asc(Spazio$)),Asc(Spazio$))
  1100.   WLocate 0,0:Print SPACE$(80)
  1101.   If DispositivoMIDI$<>""
  1102.    MIDIAttivato=OpenSerial(DispositivoMIDI$,0,31250,16)
  1103.    If MIDIAttivato=0
  1104.     EZRequest "AmySequencer message","Unable to open MIDI|on "+DispositivoMIDI$,"OK"
  1105.    Else
  1106.     SetSerialBuffer 0,64
  1107.     MIDIAttivato=True
  1108.    EndIf
  1109.   EndIf
  1110.  Until MIDIAttivato=True
  1111.  EZRequest "AmySequencer message","MIDI has been activated|on "+DispositivoMIDI$,"OK"
  1112.  WJam #UnColoreConSfondoTrasparente
  1113. End Statement
  1114.  
  1115. ;-----------------------------------------------------------------
  1116. ;questa procedura ricava l'esponente in base 2 della battuta data
  1117. ;this procedure returns the base two exponent of the given bar
  1118. ;--------------------------------------------------------------
  1119. Function .b EsponenteDiDue{Misura.w}
  1120.  Misura=Min(Max(Misura,1),128)
  1121.  Repeat
  1122.   If Misura>1
  1123.    Misura/2:Esponente+1
  1124.    If Misura>1 AND Misura MOD 2>0 Then Misura+1
  1125.   EndIf
  1126.  Until Misura=1
  1127. Function Return Esponente
  1128. End Function
  1129.  
  1130. ;-------------------------------------------------
  1131. ;questa procedura cambia la misurazione del tempo
  1132. ;this procedure change the time misuration
  1133. ;------------------------------------------
  1134. Statement CambiaLaMisuraDelTempo{}
  1135. SHARED Battiti
  1136. SHARED Misure
  1137. SHARED Spazio$
  1138.  Use Window #FinestraPrincipale
  1139.  WJam #DueColoriConSfondoPieno
  1140.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1141.  WLocate 0,0:WColour 3,0:Print "Please type the basic time beats>"
  1142.  NuoviBattiti.w=Val(StripLead$(StripTrail$(Edit$(Str$(#BattitiDiBase),48),Asc(Spazio$)),Asc(Spazio$)))
  1143.  Battiti=Min(Max(NuoviBattiti,1),16)
  1144.  WLocate 0,0:Print SPACE$(80)
  1145.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1146.  WLocate 0,0:WColour 3,0:Print "Please type the basic time measures>"
  1147.  NuoveMisure.w=Val(StripLead$(StripTrail$(Edit$(Str$(#MisureDiBase),44),Asc(Spazio$)),Asc(Spazio$)))
  1148.  Misure=2^EsponenteDiDue{NuoveMisure}
  1149.  WJam #UnColoreConSfondoTrasparente
  1150. End Statement
  1151.  
  1152. ;------------------------------------------------------
  1153. ;questa procedura mostra il tempo in battiti su misure
  1154. ;this procedure shows the tempo by beats per measures
  1155. ;-----------------------------------------------------
  1156. Statement MostraIlTempo{Tempo.b,CanaleEvento.b,Modo.b}
  1157. SHARED AltezzaInternaFinestraEditoreSequenza
  1158. SHARED AltezzaInternaFinestraPrincipale
  1159. SHARED XPosSfondoTempo
  1160. SHARED YPosSfondoTempo
  1161.  WJam #DueColoriConSfondoPieno
  1162.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  1163.   XMessaggio.w=(80-Len("Tempo=00/000"))*8
  1164.   YMessaggio.w=AltezzaInternaFinestraPrincipale-8-8
  1165.   WLocate XMessaggio,YMessaggio
  1166.   Print SPACE$(Len("Tempo=00/000"))
  1167.   WBlit 9,XPosSfondoTempo,YPosSfondoTempo
  1168.   WJam #UnColoreConSfondoTrasparente:WColour 3
  1169.  EndIf
  1170.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  1171.   WColour CanaleEvento-1,16-CanaleEvento
  1172.   XMessaggio=#LarghezzaPulsantiEditoreSequenza
  1173.   YMessaggio=AltezzaInternaFinestraEditoreSequenza-8
  1174.   Print SPACE$(80-XMessaggio/8)
  1175.  EndIf
  1176.  WLocate XMessaggio,YMessaggio
  1177.  Print "Tempo=",(Tempo MOD 16)+1,"/",2^(Tempo/16)
  1178. End Statement
  1179.  
  1180. ;-------------------------------------------------------------------
  1181. ;mostra la velocita' di esecuzione delle note in battute per minuto
  1182. ;shows the execution velocity in bars per minute
  1183. ;------------------------------------------------
  1184. Statement MostraLeBattutePerMinuto{BattutePerMinuto.w,CanaleEvento.b,Modo.b}
  1185. SHARED AltezzaInternaFinestraEditoreSequenza
  1186. SHARED AltezzaInternaFinestraPrincipale
  1187. SHARED XPosSfondoBattutePerMinuto
  1188. SHARED YPosSfondoBattutePerMinuto
  1189.  TicPerCinquantesimoDiSecondo.f=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  1190.  WJam #DueColoriConSfondoPieno
  1191.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  1192.   XMessaggio.w=0
  1193.   YMessaggio.w=AltezzaInternaFinestraPrincipale-8-8
  1194.   WLocate XMessaggio,YMessaggio
  1195.   Print SPACE$(Len("BPM=000-ticks/50th=000.0"))
  1196.   WBlit 8,XPosSfondoBattutePerMinuto,YPosSfondoBattutePerMinuto
  1197.   WJam #UnColoreConSfondoTrasparente:WColour 3
  1198.  EndIf
  1199.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  1200.   WColour CanaleEvento-1,16-CanaleEvento
  1201.   XMessaggio=#LarghezzaPulsantiEditoreSequenza
  1202.   YMessaggio=AltezzaInternaFinestraEditoreSequenza-8
  1203.   Print SPACE$(80-XMessaggio/8)
  1204.  EndIf
  1205.  WLocate XMessaggio,YMessaggio
  1206.  Format "000":Print "BPM=",BattutePerMinuto
  1207.  Format "000.0":Print"-ticks/50th=",TicPerCinquantesimoDiSecondo
  1208.  Format ""
  1209. End Statement
  1210.  
  1211. ;----------------------------------------------------------------------------
  1212. ;questa procedura crea una tabella di riconoscimento delle note, memorizzata
  1213. ; nell'array TipoDiNota()
  1214. ;this procedure crates a referring note recognition table, stored in the
  1215. ; TipoDiNota() array (that means Note Kind)
  1216. ;-------------------------------------------
  1217. Statement ImpostaIlTipoDiNota{Nota.b}
  1218. SHARED TipoDiNota()
  1219.  
  1220. ;--------------------------------------------
  1221. ;questa variabile indica l'ottava della nota
  1222. ;this variable state the note octave
  1223. ;------------------------------------
  1224.  OttavaDellaNota.b=Nota/12
  1225.  
  1226.  TipoDiNota(Nota)\Ottava=OttavaDellaNota
  1227.  
  1228. ;-----------------------------------------------------------------------
  1229. ;questa variabile indica a quali delle 12 note dodici note fondamentali
  1230. ; corrisponde la nota corrente
  1231. ;this variable marks which of 12 fundamental notes corresponds the current
  1232. ; note
  1233. ;------
  1234.  NotaNellOttava.b=Nota MOD 12
  1235.  
  1236.  Select NotaNellOttava
  1237.  
  1238. ;------------------
  1239. ;la nota e' un Do?
  1240. ;is the given note a C?
  1241. ;-----------------------
  1242.  Case 0
  1243.   TipoDiNota(Nota)\NomeItaliano="Do"
  1244.   TipoDiNota(Nota)\NomeInglese="C"
  1245.   TipoDiNota(Nota)\Diesis=False
  1246.  
  1247. ;-------------------------------
  1248. ;la nota e' un Do diesis (Do#)?
  1249. ;is the given note a C diesis (C#)?
  1250. ;-----------------------------------
  1251.  Case 1
  1252.   TipoDiNota(Nota)\NomeItaliano="Do#"
  1253.   TipoDiNota(Nota)\NomeInglese="C#"
  1254.   TipoDiNota(Nota)\Diesis=True
  1255.  
  1256. ;------------------
  1257. ;la nota e' un Re?
  1258. ;is the given note a D?
  1259. ;-----------------------
  1260.  Case 2
  1261.   TipoDiNota(Nota)\NomeItaliano="Re"
  1262.   TipoDiNota(Nota)\NomeInglese="D"
  1263.   TipoDiNota(Nota)\Diesis=False
  1264.  
  1265. ;-------------------------------
  1266. ;la nota e' un Re diesis (Re#)?
  1267. ;is the given note a D diesis (D#)?
  1268. ;-----------------------------------
  1269.  Case 3
  1270.   TipoDiNota(Nota)\NomeItaliano="Re#"
  1271.   TipoDiNota(Nota)\NomeInglese="D#"
  1272.   TipoDiNota(Nota)\Diesis=True
  1273.  
  1274. ;------------------
  1275. ;la nota e' un Mi?
  1276. ;is the given note a E?
  1277. ;-----------------------
  1278.  Case 4
  1279.   TipoDiNota(Nota)\NomeItaliano="Mi"
  1280.   TipoDiNota(Nota)\NomeInglese="E"
  1281.   TipoDiNota(Nota)\Diesis=False
  1282.  
  1283. ;------------------
  1284. ;la nota e' un Fa?
  1285. ;is the given note a F?
  1286. ;-----------------------
  1287.  Case 5
  1288.   TipoDiNota(Nota)\NomeItaliano="Fa"
  1289.   TipoDiNota(Nota)\NomeInglese="F"
  1290.   TipoDiNota(Nota)\Diesis=False
  1291.  
  1292. ;-------------------------------
  1293. ;la nota e' un Fa diesis (Fa#)?
  1294. ;is the given note a F diesis (F#)?
  1295. ;-----------------------------------
  1296.  Case 6
  1297.   TipoDiNota(Nota)\NomeItaliano="Fa#"
  1298.   TipoDiNota(Nota)\NomeInglese="F#"
  1299.   TipoDiNota(Nota)\Diesis=True
  1300.  
  1301. ;-------------------
  1302. ;la nota e' un Sol?
  1303. ;is the given note a G?
  1304. ;-----------------------
  1305.  Case 7
  1306.   TipoDiNota(Nota)\NomeItaliano="Sol"
  1307.   TipoDiNota(Nota)\NomeInglese="G"
  1308.   TipoDiNota(Nota)\Diesis=False
  1309.  
  1310. ;---------------------------------
  1311. ;la nota e' un Sol diesis (Sol#)?
  1312. ;is the given note a G diesis (G#)?
  1313. ;-----------------------------------
  1314.  Case 8
  1315.   TipoDiNota(Nota)\NomeItaliano="Sol#"
  1316.   TipoDiNota(Nota)\NomeInglese="G#"
  1317.   TipoDiNota(Nota)\Diesis=True
  1318.  
  1319. ;------------------
  1320. ;la nota e' un La?
  1321. ;is the given note an A?
  1322. ;------------------------
  1323.  Case 9
  1324.   TipoDiNota(Nota)\NomeItaliano="La"
  1325.   TipoDiNota(Nota)\NomeInglese="A"
  1326.   TipoDiNota(Nota)\Diesis=False
  1327.  
  1328. ;-------------------------------
  1329. ;la nota e' un La diesis (La#)?
  1330. ;is the given note an A diesis (A#)?
  1331. ;------------------------------------
  1332.  Case 10
  1333.   TipoDiNota(Nota)\NomeItaliano="La#"
  1334.   TipoDiNota(Nota)\NomeInglese="A#"
  1335.   TipoDiNota(Nota)\Diesis=True
  1336.  
  1337. ;------------------
  1338. ;la nota e' un Si?
  1339. ;is the given note a B?
  1340. ;-----------------------
  1341.  Case 11
  1342.   TipoDiNota(Nota)\NomeItaliano="Si"
  1343.   TipoDiNota(Nota)\NomeInglese="B"
  1344.   TipoDiNota(Nota)\Diesis=False
  1345.  
  1346.  End Select
  1347. End Statement
  1348.  
  1349. Statement CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  1350. SHARED PeriFreq()
  1351. SHARED DistanzaSemitono
  1352. ;-------------------------------------------------------------------------
  1353. ;per ottenere la frequenza di tutte le 128 note, si parte dal La della 4a
  1354. ; ottava (la prima e' l'ottava zero), la cui frequenza e' nota e la si
  1355. ; moltiplica o divide per la distanza minima tra due note che e' il semitono;
  1356. ; per ottenere il periodo si divide una delle costanti di temporizzazione, a
  1357. ; seconda che il proprio AMIGA usi uno schermo PAL o NTSC, per la frequenza
  1358. ; della nota; queste costanti sono riportate sul MANUALE DI RIFERIMENTO PER
  1359. ; L'HARDWARE AMIGA
  1360. ;to obtain all 128 notes it starts from the A from the 4rd octave (the 1st is
  1361. ; the zero octave) that has a known frequency, and it multiply or divide this
  1362. ; for the minimum distance between two notes that is the semitone; to obtain
  1363. ; the period it divides one of the timing constants, depending on your AMIGA
  1364. ; uses a PAL or NTSC screen, for the note frequency; these constants are
  1365. ; reported on the AMIGA HARDWARE REFERENCE MANUAL
  1366. ;-------------------------------------------------
  1367. PeriFreq(45)\Frequenza=440
  1368. If NTSC=True
  1369.  PeriFreq(45)\Periodo=#TemporizzazioneNTSC/PeriFreq(45)\Frequenza
  1370. Else
  1371.  PeriFreq(45)\Periodo=#TemporizzazionePAL/PeriFreq(45)\Frequenza
  1372. EndIf
  1373. ImpostaIlTipoDiNota{45}
  1374.  
  1375. For Nota.w=46 To 127
  1376.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota-1)\Frequenza*DistanzaSemitono
  1377.  If NTSC=True
  1378.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  1379.  Else
  1380.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  1381.  EndIf
  1382.  ImpostaIlTipoDiNota{Nota}
  1383. Next Nota
  1384.  
  1385. For Nota=44 To 0 Step -1
  1386.  PeriFreq(Nota)\Frequenza=PeriFreq(Nota+1)\Frequenza/DistanzaSemitono
  1387.  If NTSC=True
  1388.   PeriFreq(Nota)\Periodo=#TemporizzazioneNTSC/PeriFreq(Nota)\Frequenza
  1389.  Else
  1390.   PeriFreq(Nota)\Periodo=#TemporizzazionePAL/PeriFreq(Nota)\Frequenza
  1391.  EndIf
  1392.  ImpostaIlTipoDiNota{Nota}
  1393. Next Nota
  1394. End Statement
  1395.  
  1396. ;------------------------------------------------------------------------------
  1397. ;la seguente procedura converte un valore temporale da tic in battute, battiti
  1398. ; e tic; la variabile OrigineZero serve per la differente visualizzazione
  1399. ; della durata delle note che, se vera, parte da zero
  1400. ;the following procedure converts a time value from ticks into bars, beats and
  1401. ; ticks; the OrigineZero variable is used for the different note length
  1402. ; displacement that, if this is true, starts from zero instead of starting
  1403. ; from one
  1404. ;----------
  1405. Statement ConvertiIlTempoInBattute{Tempo.l,Origine.b}
  1406. SHARED Battiti
  1407. SHARED Misure
  1408.  Battuta.l=Tempo/((#TicDiBasePerQuarto*4.0*Battiti)/Misure)
  1409.  Battito.b=(Tempo/(#TicDiBasePerQuarto/(Misure/4.0))) MOD Battiti
  1410.  If Origine=1 Then Battuta+1:Battito+1
  1411.  Print Battuta,".",Battito
  1412.  Tic.w=Tempo MOD (#TicDiBasePerQuarto/(Misure/4.0))
  1413.  If Tic>0 Then Print ".",Tic
  1414. End Statement
  1415.  
  1416. ;-------------------------------------------------
  1417. ;questa procedura imposta le barre di scorrimento
  1418. ;this procedure sets sliders
  1419. ;----------------------------
  1420. Statement ImpostaSlider{Slider.l,XPos.w,YPos.w,Orientamento$,Parametri.l,ListaGadgetSlider.l}
  1421. SHARED XLunSlider
  1422. SHARED YLunSlider
  1423.  Orientamento$=UCase$(Orientamento$)
  1424.  If Orientamento$="HORIZONTAL" Then Parametri+#MovimentoOrizzontale
  1425.  If Orientamento$="VERTICAL" Then Parametri+#MovimentoVerticale
  1426.  PropGadget ListaGadgetSlider,XPos,YPos,Parametri,Slider,XLunSlider,YLunSlider
  1427. End Statement
  1428.  
  1429. ;------------------------------------------------
  1430. ;questa procedura mostra le barre di scorrimento
  1431. ;this procedure showss the sliders
  1432. ;----------------------------------
  1433. Statement MostraSlider{Slider.l,ValoreDato.l,ValoreMassimo.l,Orientamento$,ListaGadgetSlider.l,FinestraSlider.l}
  1434.  Orientamento$=UCase$(Orientamento$)
  1435.  If Orientamento$="HORIZONTAL"
  1436.   SetHProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1437.  EndIf
  1438.  If Orientamento$="VERTICAL"
  1439.   SetVProp ListaGadgetSlider,Slider,ValoreDato/ValoreMassimo,1/ValoreMassimo
  1440.  EndIf
  1441.  Redraw FinestraSlider,Slider
  1442. End Statement
  1443.  
  1444. ;--------------------------------------------------
  1445. ;questa procedura gestisce le barre di scorrimento
  1446. ;this procedure manage the sliders
  1447. ;----------------------------------
  1448. Function .l ValoreSlider{Slider.l,ValoreMassimo.l,LunghezzaSlider.l,Orientamento$,ListaGadgetSlider.l}
  1449.  Orientamento$=UCase$(Orientamento$)
  1450.  If Orientamento$="HORIZONTAL"
  1451.   ValoreSlider.f=HPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1452.   ValoreIndicatoDalTopo.w=EMouseX*ValoreMassimo/LunghezzaSlider
  1453.  EndIf
  1454.  If Orientamento$="VERTICAL"
  1455.   ValoreSlider=VPropPot(ListaGadgetSlider,Slider)*ValoreMassimo
  1456.   ValoreIndicatoDalTopo=EMouseY*ValoreMassimo/LunghezzaSlider
  1457.  EndIf
  1458.  ValoreIndicatoDalloSlider.l=Int(ValoreSlider)
  1459.  If ValoreIndicatoDalTopo>ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider+1
  1460.  If ValoreIndicatoDalTopo<ValoreIndicatoDalloSlider Then ValoreIndicatoDalloSlider-1
  1461.  ValoreIndicatoDalloSlider=Min(Max(ValoreIndicatoDalloSlider,0),ValoreMassimo)
  1462.  Function Return ValoreIndicatoDalloSlider
  1463. End Function
  1464.  
  1465. ;---------------------------------------------------------------------------
  1466. ;questa procedura cancella il file storico degli ultimi 5 MIDI file  aperti
  1467. ;this procedure clears the last 5 loaded MIDI files history file
  1468. ;----------------------------------------------------------------
  1469. Statement CancellaLaStoriaDeiFileMIDIAperti{}
  1470. SHARED FileMIDIAperto$()
  1471. SHARED StoriaDeiFileMIDIAperti
  1472. SHARED VoceMenuEsci
  1473.  KillFile "LoadedMIDIFilesHistory"
  1474.  For FileMIDIAperto.b=0 To 4
  1475.   FileMIDIAperto$(FileMIDIAperto)=""
  1476.  Next FileMIDIAperto
  1477.  StoriaDeiFileMIDIAperti=False
  1478.  VoceMenuEsci=4
  1479. End Statement
  1480.  
  1481. ;------------------------------------------------------------------------
  1482. ;questa procedura carica il file storico degli ultimi 5 file MIDI aperti
  1483. ;this procedure loads the last 5 loaded MIDI files history file
  1484. ;---------------------------------------------------------------
  1485. Statement CaricaLaStoriaDeiFileMIDIAperti{}
  1486. SHARED FileMIDIAperto$()
  1487. SHARED StoriaDeiFileMIDIAperti
  1488. SHARED VoceMenuEsci
  1489.  StoriaDeiFileMIDIAperti=ReadFile(#StoriaDeiFileMIDI,"LoadedMIDIFilesHistory")
  1490.  If StoriaDeiFileMIDIAperti=True AND Lof(#StoriaDeiFileMIDI)>0
  1491.  
  1492.   For FileMIDIAperto.b=0 To 4
  1493.    FileMIDIAperto$(FileMIDIAperto)=""
  1494.   Next FileMIDIAperto
  1495.  
  1496.   FileInput #StoriaDeiFileMIDI
  1497.   FileMIDIAperto=0
  1498.   VoceMenuEsci=4
  1499.  
  1500.   Repeat
  1501.    Dato$=Inkey$
  1502.    If Dato$=Chr$(10)
  1503.     FileMIDIAperto+1
  1504.     VoceMenuEsci+1
  1505.    Else
  1506.     FileMIDIAperto$(FileMIDIAperto)+Dato$
  1507.    EndIf
  1508.   Until Dato$=""
  1509.  
  1510.   CloseFile #StoriaDeiFileMIDI
  1511.   PopInput
  1512.  
  1513.  Else
  1514.   StoriaDeiFileMIDIAperti=False
  1515.  EndIf
  1516. End Statement
  1517.  
  1518. ;------------------------------------------------------------------
  1519. ;crea la bitmap per l'immagine di sfondo della finestra principale
  1520. ;creates the bitmap for the background pic of the main window
  1521. ;-------------------------------------------------------------
  1522. Statement CreaLaBitmapPerLImmagineDiSfondo{}
  1523.  
  1524. ;----------------------------------------
  1525. ;crea la bitmap per l'immagine di sfondo
  1526. ;creates the bitmap for the background pic
  1527. ;------------------------------------------
  1528.  BitMap #BitmapImmagineDiSfondo,640,240,4
  1529.  
  1530. End Statement
  1531.  
  1532. ;-------------------------------------------------------------------
  1533. ;carica l'immagine di sfondo della finestra principale nella bitmap
  1534. ;loads the background pic of the main window into the bitmap
  1535. ;------------------------------------------------------------
  1536. Statement CaricaLImmagineDiSfondoNellaBitmap{}
  1537. SHARED ColoriOriginali
  1538.  
  1539. If ColoriOriginali=True
  1540.  ImmagineDiSfondo$="BackPicOC.16Cols"
  1541. Else
  1542.  ImmagineDiSfondo$="BackPic.16Cols"
  1543. EndIf
  1544.  
  1545. ;----------------------------------------------------------------------------
  1546. ;carica l'immagine di sfondo per la finestra principale nella bitmap creata
  1547. ; per questa
  1548. ;loads the main window background image into the bitmap creted for it
  1549. ;---------------------------------------------------------------------
  1550.  LoadBitMap #BitmapImmagineDiSfondo,ImmagineDiSfondo$,#TavolozzaDeiColori
  1551.  
  1552. ;---------------------------------------------------
  1553. ;usa la tavolozza dei colori dell'immagine caricata
  1554. ;use loaded image colours palette
  1555. ;---------------------------------
  1556.  Use Palette #TavolozzaDeiColori
  1557.  
  1558. End Statement
  1559.  
  1560. ;------------------------------------
  1561. ;questa procedura imposta lo schermo
  1562. ;this procedure sets the screen
  1563. ;-------------------------------
  1564. Statement ImpostaLoSchermo{}
  1565. SHARED AltezzaFonte
  1566. SHARED AltezzaSchermo
  1567. SHARED LarghezzaSchermo
  1568. SHARED TracceVisibili
  1569.  
  1570. ;--------------------------------------
  1571. ;imposta la fonte di caratteri globale
  1572. ;sets the global characters font
  1573. ;--------------------------------
  1574.  Use IntuiFont #FonteDiCaratteriTopaz8
  1575.  
  1576. ;------------------------------------
  1577. ;inizializza la tavolozza dei colori
  1578. ;initializes the colours palette
  1579. ;--------------------------------
  1580.  InitPalette #TavolozzaDeiColori,16
  1581.  
  1582. ;-------------------------------
  1583. ;carica i colori per lo schermo
  1584. ;loads colours for screen
  1585. ;-------------------------
  1586. ; For Colore.b=0 To 15
  1587. ;  Read Rosso.b
  1588. ;  Read Verde.b
  1589. ;  Read Blu.b
  1590. ;  PalRGB #TavolozzaDeiColori,Colore,Rosso,Verde,Blu
  1591. ; Next Colore
  1592.  
  1593. ;----------------------------------------------------------------
  1594. ;imposta le penne dello schermo con i migliori colori (ROM 2.0+)
  1595. ;sets screen pens with best colours (ROM 2.0+)
  1596. ;----------------------------------------------
  1597.  ScreenPens 3,2,0,1,3,1,2
  1598.  
  1599. ;------------------------------------------------
  1600. ;apre lo schermo in alta risoluzione a 16 colori
  1601. ;opens high resolution screen with 16 colours
  1602. ;---------------------------------------------
  1603.  Screen #Schermo,4+8,"AmySequencer 0.21 (Fri, 23 Apr 2004) by Stefano Maria Regattin"
  1604.  
  1605. ;-----------------------------
  1606. ;usa la tavolozza dei colori
  1607. ;use colours palette
  1608. ;--------------------
  1609.  Use Palette #TavolozzaDeiColori
  1610.  
  1611. ;-------------------------------------------------------------------------------
  1612. ;questa variabile contiene l'indirizzo di memoria della struttura dello schermo
  1613. ;this variable retains the screen structure memory address
  1614. ;----------------------------------------------------------
  1615.  IndirizzoSchermo.l=Peek.l(Addr Screen(0))
  1616.  
  1617. ;----------------------------------------------------------
  1618. ;questa variabile contiene la vera larghezza Dello schermo
  1619. ;this variable retains the true screen width
  1620. ;--------------------------------------------
  1621.  LarghezzaSchermo=Peek.w(IndirizzoSchermo+12)
  1622.  
  1623. ;--------------------------------------------------------
  1624. ;questa variabile contiene la vera altezza dello schermo
  1625. ;this variable retains the true screen height
  1626. ;---------------------------------------------
  1627.  AltezzaSchermo=Peek.w(IndirizzoSchermo+14)
  1628.  
  1629. ;-------------------------------------------------------------
  1630. ;questa variabile indica il massimo numero di tracce visibili
  1631. ;this variable states the visible tracks maximum number
  1632. ;-------------------------------------------------------
  1633.  TracceVisibili=(AltezzaSchermo-(AltezzaFonte+3)-8-8-8)/8
  1634.  
  1635. End Statement
  1636.  
  1637. ;-----------------------------------------------------------------------
  1638. ;questa procedura mostra l'immagine di sfondo nella finestra principale
  1639. ;this procedure shows the  background pic into the main window
  1640. ;--------------------------------------------------------------
  1641. Statement MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1642.  
  1643. ;---------------------------------------------------------
  1644. ;copia l'immamgine dalla bitmap nella finestra principale
  1645. ;copies the pic from the bitmap into the main window
  1646. ;----------------------------------------------------
  1647.  BitMaptoWindow #BitmapImmagineDiSfondo,#FinestraPrincipale,0,0,0,0,640,240
  1648.  
  1649. End Statement
  1650.  
  1651. ;-------------------------------------------------------------------------
  1652. ;this procedure stores the background portion under the main window tempo
  1653. ; displacement
  1654. ;--------------
  1655. Statement CopiaLoSfondoSottoAlTempo{}
  1656. SHARED AltezzaInternaFinestraPrincipale
  1657. SHARED LarghezzaInternaFinestraPrincipale
  1658. SHARED XPosSfondoTempo
  1659. SHARED YPosSfondoTempo
  1660.  XPosSfondoTempo=LarghezzaInternaFinestraPrincipale-1-(Len("Tempo=00/000")*8-1)
  1661.  YPosSfondoTempo=AltezzaInternaFinestraPrincipale-8-8
  1662.  XLunSfondoTempo.b=Len("Tempo=00/000")*8
  1663.  YLunSfondoTempo.b=8
  1664.  GetaShape 9,XPosSfondoTempo,YPosSfondoTempo,XLunSfondoTempo,YLunSfondoTempo
  1665. End Statement
  1666.  
  1667. ;----------------------------------------------------------------------------
  1668. ;this procedure stores the background portion under the main window bars per
  1669. ; minute displacement
  1670. ;---------------------
  1671. Statement CopiaLoSfondoSottoAlleBattutePerMinuto{}
  1672. SHARED AltezzaInternaFinestraPrincipale
  1673. SHARED LarghezzaInternaFinestraPrincipale
  1674. SHARED XPosSfondoBattutePerMinuto
  1675. SHARED YPosSfondoBattutePerMinuto
  1676.  XPosSfondoBattutePerMinuto=0
  1677.  YPosSfondoBattutePerMinuto=AltezzaInternaFinestraPrincipale-8-8
  1678.  XLunSfondoBattutePerMinuto.w=Len("BPM=000-ticks/50th=000.0")*8
  1679.  YLunSfondoBattutePerMinuto.b=8
  1680.  GetaShape 8,XPosSfondoBattutePerMinuto,YPosSfondoBattutePerMinuto,XLunSfondoBattutePerMinuto,YLunSfondoBattutePerMinuto
  1681. End Statement
  1682.  
  1683. ;-----------------------------------------------------------
  1684. ;questa procedura imposta la finestra principale invisibile
  1685. ;this procedure sets the main invisible window
  1686. ;----------------------------------------------
  1687. Statement ImpostaLaFinestraPrincipale{}
  1688. SHARED AltezzaFonte
  1689. SHARED AltezzaInternaFinestraPrincipale
  1690. SHARED AltezzaSchermo
  1691. SHARED BattutePerMinuto
  1692. SHARED FineMotivo
  1693. SHARED LarghezzaInternaFinestraPrincipale
  1694. SHARED LarghezzaSchermo
  1695. SHARED StoriaDeiFileMIDIAperti
  1696. SHARED TracceVisibili
  1697. SHARED XLunSlider
  1698. SHARED YLunSlider
  1699.  
  1700. ;-----------------------------------------------------------------------
  1701. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  1702. ;sets text menu colour to the brightest available
  1703. ;-------------------------------------------------
  1704.  MenuColour 3
  1705.  
  1706. ;-------------------------------------------------------------------
  1707. ;apre la finestra principale per ricavarne la larghezza e l'altezza
  1708. ;opens main window to obtain its width and height
  1709. ;-------------------------------------------------
  1710.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  1711.  TipoFinestra.l=#FinestraDiSfondo+#FinestraSenzaBordi+#FinestraAttivata
  1712.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1
  1713.  
  1714.  MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  1715.  
  1716. ;-------------------------------------------------------------------------
  1717. ;questa variabile conserva la larghezza interna della finestra principale
  1718. ;this variable stores the inner witdh of the main window
  1719. ;--------------------------------------------------------
  1720.  LarghezzaInternaFinestraPrincipale.w=InnerWidth
  1721.  
  1722. ;----------------------------------------------------------------------
  1723. ;questa variabile conserva l'altezza interna della finestra principale
  1724. ;this variable stores the inner height of the main window
  1725. ;---------------------------------------------------------
  1726.  AltezzaInternaFinestraPrincipale.w=InnerHeight
  1727.  
  1728.  CloseWindow #FinestraPrincipale
  1729.  
  1730. ;----------------------------------------------------------------------
  1731. ;imposta la barra di scorrimento che regola la velocita' di esecuzione
  1732. ;sets the slider that tunes the execution velocity
  1733. ;--------------------------------------------------
  1734.  XLunSlider=LarghezzaInternaFinestraPrincipale
  1735.  YLunSlider=8
  1736.  ImpostaSlider{1,0,AltezzaInternaFinestraPrincipale-8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1737.  
  1738. ;-----------------------------------------------------------------------
  1739. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1740. ;sets the slider that is used to show the sequences
  1741. ;---------------------------------------------------
  1742.  XLunSlider=16
  1743.  YLunSlider=TracceVisibili*8
  1744.  ImpostaSlider{2,0,8,"VERTICAL",0,#ListaGadgetPrincipale}
  1745.  
  1746. ;-----------------------------------------------------------------------
  1747. ;imposta la barra di scorrimento che serve per visualizzare le sequenze
  1748. ;sets the slider that is used to show the sequences
  1749. ;---------------------------------------------------
  1750.  XLunSlider=LarghezzaInternaFinestraPrincipale-16
  1751.  YLunSlider=4
  1752.  ImpostaSlider{3,16,8+TracceVisibili*8,"HORIZONTAL",0,#ListaGadgetPrincipale}
  1753.  
  1754. ;------------------------------------------------------------------------------
  1755. ;apre la finestra principale solo per il menu' come invisibile e ci attacca la
  1756. ; lista dei gadget principale
  1757. ;opens main window for menu usage only as invisible and it attaches the main
  1758. ; gadget list
  1759. ;-------------
  1760.  Window #FinestraPrincipale,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1,#ListaGadgetPrincipale
  1761.  
  1762. ;----------------------------------------------
  1763. ;imposta la fonte di caratteri per la finestra
  1764. ;sets the font for the window
  1765. ;-----------------------------
  1766.  WindowFont #FonteDiCaratteriTopaz8
  1767.  
  1768.  WJam #UnColoreConSfondoTrasparente
  1769.  
  1770. ;-----------------------------------------------------------------
  1771. ;le finestre di richiesta sono assegnate alla finestra principale
  1772. ;the request windows are assigned to main window
  1773. ;------------------------------------------------
  1774.  EZOutput #FinestraPrincipale
  1775.  
  1776.  FinestraPrincipaleAperta=True
  1777.  
  1778. End Statement
  1779.  
  1780. ;------------------------------------------------------------
  1781. ;questa procedura imposta il menu' della finestra principale
  1782. ;this procedure sets the main window menu
  1783. ;-----------------------------------------
  1784. Statement ImpostaIlMenuDellaFinestraPrincipale{}
  1785. SHARED ColoriOriginali
  1786. SHARED FileMIDIAperto$()
  1787. SHARED StoriaDeiFileMIDIAperti
  1788. SHARED VoceMenuEsci
  1789.  
  1790. ;-------------------------------------------
  1791. ;elimina il menu' della finestra principale
  1792. ;delete the main window menu
  1793. ;----------------------------
  1794.  Free MenuList #ListaMenuPrincipale
  1795.  
  1796. ;-------------------------
  1797. ;imposta il menu' Project
  1798. ;sets Project menu
  1799. ;------------------
  1800.  MenuTitle #ListaMenuPrincipale,0,"Song"
  1801.  MenuItem #ListaMenuPrincipale,0,0,0,"New"
  1802.  MenuItem #ListaMenuPrincipale,0,0,1,"Load"
  1803.  MenuItem #ListaMenuPrincipale,0,0,2,"Save"
  1804.  MenuItem #ListaMenuPrincipale,0,0,3,"Save as"
  1805.  If StoriaDeiFileMIDIAperti=True
  1806.   For FileMIDIAperto.b=4 To VoceMenuEsci-1
  1807.    FileMIDI$=FileMIDIAperto$(FileMIDIAperto-4)
  1808.    IndirizzoNomeFileMIDIAperto.l=FilePart_(FileMIDI$)
  1809. ;   PercorsoFileMIDIAperto$=UnLeft$(FileMIDI$,Len(Peek$(IndirizzoNomeFileMIDIAperto)))
  1810.    NomeFileMIDIAperto$=Right$(FileMIDI$,Len(Peek$(IndirizzoNomeFileMIDIAperto)))
  1811.    If Len(NomeFileMIDIAperto$)>30 Then NomeFileMIDIAperto$="..."+Right$(NomeFileMIDIAperto$,27)
  1812.    MenuItem 0,0,0,FileMIDIAperto,NomeFileMIDIAperto$
  1813.   Next FileMIDIAperto
  1814.  EndIf
  1815.  MenuItem 0,0,0,VoceMenuEsci,"Quit"
  1816.  
  1817. ;--------------------------
  1818. ;imposta il menu' Controls
  1819. ;sets Controls menu
  1820. ;------------------
  1821.  MenuTitle #ListaMenuPrincipale,1,"Controls"
  1822.  MenuItem #ListaMenuPrincipale,0,1,0,"Play"
  1823.  MenuItem #ListaMenuPrincipale,0,1,1,"Record"
  1824.  MenuItem #ListaMenuPrincipale,0,1,2,"Stop"
  1825.  
  1826. ;---------------------------
  1827. ;imposta il menu' Sequences
  1828. ;sets Sequences menu
  1829. ;--------------------
  1830.  MenuTitle #ListaMenuPrincipale,2,"Sequence"
  1831.  MenuItem #ListaMenuPrincipale,0,2,0,"Edit"
  1832.  MenuItem #ListaMenuPrincipale,0,2,1,"Name"
  1833.  
  1834. ;------------------------
  1835. ;imposta il menu' Sounds
  1836. ;sets Sounds menu
  1837. ;-----------------
  1838.  MenuTitle #ListaMenuPrincipale,3,"Sounds"
  1839.  MenuItem #ListaMenuPrincipale,0,3,0,"Edit"
  1840.  
  1841. ;-----------------------
  1842. ;imposta il menu' Prefs
  1843. ;sets Prefs menu
  1844. ;----------------
  1845.  MenuTitle #ListaMenuPrincipale,4,"Prefs"
  1846.  MenuItem #ListaMenuPrincipale,0,4,0,"Set MIDI device"
  1847.  If ColoriOriginali=True Then Colori.b=3 Else Colori=1
  1848.  MenuItem #ListaMenuPrincipale,Colori,4,1,"  Original colours"
  1849.  MenuItem #ListaMenuPrincipale,0,4,2,"Clear loaded MIDI files history"
  1850.  
  1851. ;---------------------------------
  1852. ;seleziona la finestra principale
  1853. ;selects the main window
  1854. ;------------------------
  1855.  Use Window #FinestraPrincipale
  1856.  
  1857. ;-------------------------------
  1858. ;attacca il menu' alla finestra
  1859. ;attaches menu to window
  1860. ;------------------------
  1861.  SetMenu #ListaMenuPrincipale
  1862.  
  1863. End Statement
  1864.  
  1865. ;---------------------------------------------------------------------------
  1866. ;questa funzione converte il valore dato se oltre 127 in un valore negativo
  1867. ;this function converts the given value if over 127 into the negative
  1868. ; equivalent
  1869. ;------------
  1870. Function.b ConvertiOltreCentoventisetteInNegativo{Dato.w}
  1871.  If Dato>127 Then Dato-256
  1872.  DatoConvertito.b=Dato
  1873.  Function Return DatoConvertito
  1874. End Function
  1875.  
  1876. ;--------------------------------------------------------------------------
  1877. ;questa e' la funzione del panico: Premete il TASTO SINISTRO DEL MOUSE per
  1878. ; rallentare la conversione del file MIDI in caricamento o premete il TASTO
  1879. ; DESTRO DEL MOUSE per annullare la conversione
  1880. ;this is the panic function: press the LEFT MOUSE BUTTON to slow the
  1881. ; conversion of the MIDI file loading or press the RIGHT MOUSE BUTTON to abort
  1882. ; the conversion
  1883. ;----------------
  1884. Function .b Panico{}
  1885.  Select Joyb(0)
  1886.  Case #TastoSinistroDelTopoPremuto
  1887.   Delay_ 50:Panico.b=True
  1888. ; Case #TastoDestroDelTopoPremuto
  1889. ;  Panico=False
  1890. ; Case #EntrambiITastiDelTopoPremuti
  1891.  End Select
  1892.  Function Return Panico
  1893. End Statement
  1894.  
  1895. ;-------------------------------------
  1896. ;questa procedura carica un file MIDI
  1897. ;this procedure loads a MIDI file
  1898. ;---------------------------------
  1899. Statement CaricaUnFileMIDI{NomeDelFileMIDI$}
  1900. SHARED Battiti
  1901. SHARED EventoMusicale()
  1902. SHARED FileMIDIAperto$()
  1903. SHARED HeaderMarker$
  1904. SHARED Misure
  1905. SHARED Sequenza()
  1906. SHARED SequenzaEsistente()
  1907. SHARED SequenzaMassimaDaCreare
  1908. SHARED SequenzaNellaTraccia()
  1909. SHARED Spazio$
  1910. SHARED StoriaDeiFileMIDIAperti
  1911. SHARED Traccia()
  1912. SHARED TrackMarker$
  1913.  MaxLen P$=160
  1914.  MaxLen F$=64
  1915.  If NomeDelFileMIDI$=""
  1916.   NomeDelFileMIDI$=FileRequest$("Load a MIDI file",P$,F$)
  1917.  Else
  1918.   CaricatoDalMenu.b=True
  1919.  EndIf
  1920.  If NomeDelFileMIDI$<>""
  1921.   FileMIDIAperto.b=ReadFile(#FileMIDIDaCaricare,NomeDelFileMIDI$)
  1922.   If FileMIDIAperto=True
  1923.    FileInput #FileMIDIDaCaricare
  1924.    ResetList Sequenza()
  1925.    ResetList SequenzaNellaTraccia()
  1926.    MarcatoreIniziale$=Inkey$(4)
  1927.    If MarcatoreIniziale$=HeaderMarker$
  1928.     WJam #DueColoriConSfondoPieno
  1929.     WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1930.     WLocate 0,0:WColour 3,0:Print "Recognized a MIDI file..."
  1931.     Delay_ 50
  1932.     If Cvl(Inkey$(4))=#_MarkerLength
  1933.      WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1934.      WLocate 0,0:WColour 3,0:Print "Header length correct..."
  1935.      Delay_ 50
  1936.      TipoDiFileMIDI.b=Cvi(Inkey$(2))
  1937.      WLocate 0,0:WColour 0,0:Print SPACE$(80):WLocate 0,0:WColour 3,0
  1938.      Select TipoDiFileMIDI
  1939.      Case #_FormatZero
  1940.       Print "Recognized Standard MIDI File Format 0..."
  1941.       Delay_ 50
  1942.      Case #_FormatOne
  1943.       Print "Recognized Standard MIDI File Format 1..."
  1944.       Delay_ 50
  1945.      Case #_FormatTwo
  1946.       Print "Recognized Standard MIDI File Format 2..."
  1947.       Delay_50
  1948.      Default
  1949.       IlFileCaricatoNonEUnFileMIDI.b=True
  1950.       Pop Select:Pop If:Pop If:Pop If:Pop If:Goto FineCicloCaricamento
  1951.      End Select
  1952.  
  1953.      If IlFileCaricatoNonEUnFileMIDI=False
  1954.       Tracce.w=Cvi(Inkey$(2))
  1955.       If Tracce>0
  1956.        WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1957.        WLocate 0,0:WColour 3,0:Print "There "
  1958.        If Tracce=1 Then Print "is one track..." Else Print "are ",Tracce," tracks..."
  1959.        Delay_ 50
  1960.  
  1961.        If Tracce>1 AND TipoDiFileMIDI=#_FormatZero
  1962.         IlFileCaricatoNonEUnFileMIDI=True
  1963.         Pop If:Pop If:Pop If:Pop If:Pop If:Pop If:Pop If
  1964.         Goto FineCicloCaricamento
  1965.        EndIf
  1966.  
  1967.        TicPerQuarto.w=Cvi(Inkey$(2))
  1968.        If TicPerQuarto<0
  1969.         EZRequest "AmySequencer message","SMPTE timing not supported yet","OK"
  1970.         Pop If:Pop If:Pop If:Pop If:Pop If:Pop If:Pop If
  1971.         Goto FineCicloCaricamento
  1972.        EndIf
  1973.  
  1974.        TicPerSessantaquattresimo.b=TicPerQuarto/16
  1975.        WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1976.        WLocate 0,0:WColour 3,0:Print "Ticks per quarter note: ",TicPerQuarto,"..."
  1977.        Delay_ 50
  1978.        WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1979.        WLocate 0,0:WColour 3,0
  1980.        If Tracce=1 Then Print "One track loading..." Else Print Tracce," tracks loading..."
  1981.        Delay_ 50
  1982.        Traccia.w=0
  1983.        Repeat
  1984.         WLocate 0,0:WColour 0,0:Print SPACE$(80)
  1985.         WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  1986.         Sequenza.l=Traccia+1
  1987.         LastItem Sequenza()
  1988.  
  1989.         If AddItem(Sequenza())=False
  1990.          EZRequest "AmySequencer message","You have used all the available sequences","OK"
  1991.          Pop If:Pop Repeat:Pop If:Pop If:Pop If:Pop If:Pop If:Pop If
  1992.          Goto FineCicloCaricamento
  1993.         EndIf
  1994.  
  1995.         ResetList Sequenza()
  1996.         SequenzaCorrente.l=0
  1997.         While NextItem(Sequenza())=True
  1998.          SequenzaCorrente+1
  1999.          If SequenzaCorrente=Sequenza Then Pop While:Goto FineRicercaSequenza
  2000.         Wend
  2001. FineRicercaSequenza
  2002.         LastItem SequenzaNellaTraccia()
  2003.         If AddItem(SequenzaNellaTraccia())=True
  2004.          SequenzaNellaTraccia()\Sequenza=Sequenza
  2005.         Else
  2006.          EZRequest "AmySequencer message","You have used all the available sequences","OK"
  2007.          Pop If:Pop Repeat:Pop If:Pop If:Pop If:Pop If:Pop If:Pop If
  2008.          Goto FineCicloCaricamento
  2009.         EndIf
  2010.  
  2011.         ResetList SequenzaNellaTraccia()
  2012.         SequenzaCorrenteNellaTraccia.l=0
  2013.         While NextItem(SequenzaNellaTraccia())=True
  2014.          If SequenzaNellaTraccia()\Sequenza=Sequenza
  2015.           SequenzaCorrenteNellaTraccia+1
  2016.           If SequenzaCorrenteNellaTraccia=1
  2017.            SequenzaNellaTraccia()\Genitore=True
  2018.           Else
  2019.            SequenzaNellaTraccia()\Genitore=Sequenza
  2020.           EndIf
  2021.          EndIf
  2022.         Wend
  2023.  
  2024.         If SequenzaNellaTraccia()\Genitore=True
  2025.          Sequenza()\Durata=(#TicDiBasePerQuarto*4.0*Battiti)/Misure
  2026.          MarcatoreTraccia$=Inkey$(4)
  2027.          If MarcatoreTraccia$=TrackMarker$
  2028.           If Panico{}=True
  2029.            WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2030.            WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": found track marker..."
  2031.            Panico=True
  2032.           Else
  2033.            If Panico=True
  2034.             WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2035.             WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2036.             Panico=False
  2037.            EndIf
  2038.           EndIf
  2039.           LunghezzaTraccia.l=Cvl(Inkey$(4))
  2040.           If LunghezzaTraccia>0
  2041.            ContatoreByteTraccia.l=0
  2042.            InizioEventoMusicale.l=0
  2043.            PosizioneEventoMusicale.l=0
  2044.            InizioTraccia.b=True
  2045.            Repeat
  2046.  
  2047.             Repeat
  2048.              DeltaPosizioneEventoMusicale.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2049.              NuovoDeltaPosizioneEventoMusicale.b=DeltaPosizioneEventoMusicale BitTst 7
  2050.              If Panico{}=True
  2051.               WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2052.               WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2053.               If NuovoDeltaPosizioneEventoMusicale=True
  2054.                Print " another event position value to add search..."
  2055.               Else
  2056.                Print " this was the last event position value to add..."
  2057.               EndIf
  2058.               Panico=True
  2059.              Else
  2060.               If Panico=True
  2061.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2062.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2063.                Panico=False
  2064.               EndIf
  2065.              EndIf
  2066.              DeltaPosizioneEventoMusicale BitClr 7
  2067.              DeltaPosizioneEventoMusicale*TicPerSessantaquattresimo/#TicDiBasePerSessantaquattresimo
  2068.              PosizioneEventoMusicale+DeltaPosizioneEventoMusicale
  2069.              ContatoreByteTraccia+1
  2070.             Until NuovoDeltaPosizioneEventoMusicale=False
  2071.  
  2072.             If Panico{}=True
  2073.              WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2074.              WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2075.              Print " status byte search..."
  2076.              Panico=True
  2077.             Else
  2078.              If Panico=True
  2079.               WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2080.               WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2081.               Panico=False
  2082.              EndIf
  2083.             EndIf
  2084.             NuovoByteDiStato.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2085.             ContatoreByteTraccia+1
  2086.             If NuovoByteDiStato<>#_MetaEvent
  2087.              If NuovoByteDiStato<0 Then ByteDiStato.b=NuovoByteDiStato
  2088.              TipoDiEventoMusicale.b=ByteDiStato & #_StatusBits
  2089.              CanaleEventoMusicale.b=ByteDiStato & #_ChannelBits
  2090.  
  2091.              If InizioTraccia=True
  2092.               SequenzaNellaTraccia()\Inizio=PosizioneEventoMusicale
  2093.               PosizioneEventoMusicale=0
  2094.               InizioTraccia=False
  2095.              EndIf
  2096.  
  2097.              If Panico{}=True
  2098.               WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2099.               WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2100.               Print " found event at "
  2101.               ConvertiIlTempoInBattute{PosizioneEventoMusicale,1}
  2102.               Print "..."
  2103.               Panico=True
  2104.              Else
  2105.               If Panico=True
  2106.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2107.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2108.                Panico=False
  2109.               EndIf
  2110.              EndIf
  2111.              CanaleEventoMusicale+1
  2112.              Select TipoDiEventoMusicale
  2113.              Case #_NoteOff
  2114.               TipoDiEventoMusicale$="NoteOff"
  2115.               If NuovoByteDiStato>-1
  2116.                EventoMusicale.b=NuovoByteDiStato
  2117.               Else
  2118.                EventoMusicale=Asc(Inkey$)
  2119.                ContatoreByteTraccia+1
  2120.               EndIf
  2121.               ValoreEventoMusicale.b=Asc(Inkey$)
  2122.               ContatoreByteTraccia+1
  2123.               If Panico{}=True
  2124.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2125.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2126.                Print " note off value found..."
  2127.                Panico=True
  2128.               Else
  2129.                If Panico=True
  2130.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2131.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2132.                 Panico=False
  2133.                EndIf
  2134.               EndIf
  2135.              Case #_NoteOn
  2136.               TipoDiEventoMusicale$="Note"
  2137.               If NuovoByteDiStato>-1
  2138.                EventoMusicale=NuovoByteDiStato
  2139.               Else
  2140.                EventoMusicale=Asc(Inkey$)
  2141.                ContatoreByteTraccia+1
  2142.               EndIf
  2143.               ValoreEventoMusicale=Asc(Inkey$)
  2144.               ContatoreByteTraccia+1
  2145.               If ValoreEventoMusicale=0
  2146.                TipoDiEventoMusicale$="NoteOff"
  2147.                If Panico{}=True
  2148.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2149.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2150.                 Print " note off value found..."
  2151.                 Panico=True
  2152.                Else
  2153.                 If Panico=True
  2154.                  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2155.                  WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2156.                  Panico=False
  2157.                 EndIf
  2158.                EndIf
  2159.               Else
  2160.                If Panico{}=True
  2161.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2162.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2163.                 Print " note on value found..."
  2164.                 Panico=True
  2165.                Else
  2166.                 If Panico=True
  2167.                  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2168.                  WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2169.                  Panico=False
  2170.                 EndIf
  2171.                EndIf
  2172.               EndIf
  2173.              Case #_ProgramChange
  2174.               TipoDiEventoMusicale$="Program"
  2175.               If NuovoByteDiStato>-1
  2176.                EventoMusicale=NuovoByteDiStato
  2177.               Else
  2178.                EventoMusicale=Asc(Inkey$)
  2179.                ContatoreByteTraccia+1
  2180.               EndIf
  2181.               If Panico{}=True
  2182.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2183.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2184.                Print " program change value found..."
  2185.                Panico=True
  2186.               Else
  2187.                If Panico=True
  2188.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2189.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2190.                 Panico=False
  2191.                EndIf
  2192.               EndIf
  2193.              Case #_ControlChange
  2194.               TipoDiEventoMusicale$="Control"
  2195.               If NuovoByteDiStato>-1
  2196.                EventoMusicale=NuovoByteDiStato
  2197.               Else
  2198.                EventoMusicale=Asc(Inkey$)
  2199.                ContatoreByteTraccia+1
  2200.               EndIf
  2201.               ValoreEventoMusicale=Asc(Inkey$)
  2202.               ContatoreByteTraccia+1
  2203.               If Panico{}=True
  2204.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2205.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2206.                Print " control change value found..."
  2207.                Panico=True
  2208.               Else
  2209.                If Panico=True
  2210.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2211.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2212.                 Panico=False
  2213.                EndIf
  2214.               EndIf
  2215.              Case #_PolyphonicKeyPressure
  2216.               TipoDiEventoMusicale$="PolyAftertouch"
  2217.               If NuovoByteDiStato>-1
  2218.                EventoMusicale=NuovoByteDiStato
  2219.               Else
  2220.                EventoMusicale=Asc(Inkey$)
  2221.                ContatoreByteTraccia+1
  2222.               EndIf
  2223.               If Panico{}=True
  2224.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2225.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2226.                Print " polyphonic key pressure value found..."
  2227.                Panico=True
  2228.               Else
  2229.                If Panico=True
  2230.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2231.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2232.                 Panico=False
  2233.                EndIf
  2234.               EndIf
  2235.              Case #_ChannelKeyPressure
  2236.               TipoDiEventoMusicale$="MonoAftertouch"
  2237.               If NuovoByteDiStato>-1
  2238.                EventoMusicale=NuovoByteDiStato
  2239.               Else
  2240.                EventoMusicale=Asc(Inkey$)
  2241.                ContatoreByteTraccia+1
  2242.               EndIf
  2243.               If Panico{}=True
  2244.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2245.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2246.                Print " channel key pressure value found..."
  2247.                Panico=True
  2248.               Else
  2249.                If Panico=True
  2250.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2251.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2252.                 Panico=False
  2253.                EndIf
  2254.               EndIf
  2255.              Case #_PitchBend
  2256.               TipoDiEventoMusicale$="PitchBend"
  2257.               If NuovoByteDiStato>-1
  2258.                ValoreEventoMusicale=NuovoByteDiStato
  2259.               Else
  2260.                ValoreEventoMusicale=Asc(Inkey$)
  2261.                ContatoreByteTraccia+1
  2262.               EndIf
  2263.               EventoMusicale=Asc(Inkey$)
  2264.               ContatoreByteTraccia+1
  2265.               If Panico{}=True
  2266.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2267.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2268.                Print " pitchbend value found..."
  2269.                Panico=True
  2270.               Else
  2271.                If Panico=True
  2272.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2273.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2274.                 Panico=False
  2275.                EndIf
  2276.               EndIf
  2277.              Default
  2278.               TipoDiEventoMusicale$=""
  2279.              End Select
  2280.  
  2281.              If TipoDiEventoMusicale$<>""
  2282.               If TipoDiEventoMusicale$<>"NoteOff"
  2283.                If AddItem(EventoMusicale())=True
  2284.                 EventoMusicale()\Tipo=TipoDiEventoMusicale$
  2285.                 EventoMusicale()\Evento=EventoMusicale
  2286.                 EventoMusicale()\Inizio=PosizioneEventoMusicale
  2287.                 EventoMusicale()\Canale=CanaleEventoMusicale
  2288.                 EventoMusicale()\Sequenza=Sequenza
  2289.                 EventoMusicale()\Durata=2
  2290.                 If TipoDiEventoMusicale$="Note"
  2291.                  EventoMusicale()\Valore=ValoreEventoMusicale
  2292.                  EventoMusicale()\Stato | #EventoMusicaleEseguito
  2293.                 EndIf
  2294.                 If TipoDiEventoMusicale$="Control" Then EventoMusicale()\Valore=ValoreEventoMusicale
  2295.                 If TipoDiEventoMusicale$="PitchBend" Then EventoMusicale()\Valore=ValoreEventoMusicale
  2296.                 Sequenza()\EventiMusicali+1
  2297.                Else
  2298.                 EZRequest "AmySequencer message","You have used all the available sequences","OK"
  2299.                 Pop If:Pop If:Pop If:Pop If:Pop Repeat:Pop If
  2300.                 Pop If:Pop If:Pop Repeat:Pop If:Pop If:Pop If:Pop If:Pop If:Pop If
  2301.                 Goto FineCicloCaricamento
  2302.                EndIf
  2303.               Else
  2304.                PushItem EventoMusicale()
  2305.                ResetList EventoMusicale()
  2306.                While NextItem(EventoMusicale())=True
  2307.                 If EventoMusicale()\Stato & #EventoMusicaleTerminato<>#EventoMusicaleTerminato
  2308.                  If EventoMusicale()\Stato & #EventoMusicaleEseguito=#EventoMusicaleEseguito
  2309.                   If EventoMusicale()\Tipo="Note"
  2310.                    If EventoMusicale()\Evento=EventoMusicale AND EventoMusicale()\Canale=CanaleEventoMusicale
  2311.                     EventoMusicale()\Durata=PosizioneEventoMusicale-EventoMusicale()\Inizio
  2312.                     EventoMusicale()\Stato & %11110111
  2313.                     EventoMusicale()\Stato | #EventoMusicaleTerminato
  2314.                     If Panico{}=True
  2315.                      WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2316.                      WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia
  2317.                      Print ", note duration "
  2318.                      ConvertiIlTempoInBattute{EventoMusicale()\Durata,0}
  2319.                      Print "..."
  2320.                      Panico=True
  2321.                     Else
  2322.                      If Panico=True
  2323.                       WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2324.                       WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2325.                       Panico=False
  2326.                      EndIf
  2327.                     EndIf
  2328.                    EndIf
  2329.                    Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileCaricamento
  2330.                   EndIf
  2331.                  EndIf
  2332.                 Else
  2333.                  EventoMusicale()\Stato & %11101111
  2334.                 EndIf
  2335.                Wend
  2336. FineCicloWhileCaricamento
  2337.                PopItem EventoMusicale()
  2338.               EndIf
  2339.               Sequenza()\Durata=Max(Sequenza()\Durata,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  2340.              EndIf
  2341.             Else
  2342.              TipoDiMetaEvento.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2343.              ContatoreByteTraccia+1
  2344.              Select TipoDiMetaEvento
  2345.              Case #_SequenceNumber
  2346.  
  2347. ;---------------------------------------------------------------------------
  2348. ;questa variabile e' fittizia, il suo valore e' noto ed  e' 2, e' usata per
  2349. ; saltare un dato
  2350. ;this is a dummy var, its value is known and is 2, is used to skip a datum
  2351. ;--------------------------------------------------------------------------
  2352.               LunghezzaMetaEvento.l=Asc(Inkey$)
  2353.  
  2354.               ContatoreByteTraccia+1
  2355.               Sequenza=Cvi(Inkey$(2))
  2356.               ContatoreByteTraccia+2
  2357.               If Panico{}=True
  2358.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2359.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2360.                Print " sequence number: ",Sequenza,"..."
  2361.                Panico=True
  2362.               Else
  2363.                If Panico=True
  2364.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2365.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2366.                 Panico=False
  2367.                EndIf
  2368.               EndIf
  2369.               PushItem Sequenza()
  2370.               ResetList Sequenza()
  2371.               SequenzaCorrente=0
  2372.               While NextItem(Sequenza())=True
  2373.                SequenzaCorrente+1
  2374.                If SequenzaCorrente=Sequenza Then Pop While:Goto FineCicloSequenza
  2375.               Wend
  2376. FineCicloSequenza
  2377.               PopItem Sequenza()
  2378.              Case #_SequenceName
  2379.               LunghezzaNome.l=0
  2380.               Repeat
  2381.                DeltaLunghezzaNome.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2382.                FineDeiDeltaLunghezzaNome.b=DeltaLunghezzaNome BitTst 7
  2383.                If Panico{}=True
  2384.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2385.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2386.                 If FineDeiDeltaLunghezzaNome=True
  2387.                  Print " another sequence name length value to add search..."
  2388.                 Else
  2389.                  Print " this was the last sequence name length value to add..."
  2390.                 EndIf
  2391.                 Panico=True
  2392.                Else
  2393.                 If Panico=True
  2394.                  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2395.                  WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2396.                  Panico=False
  2397.                 EndIf
  2398.                EndIf
  2399.                DeltaLunghezzaNome BitClr 7
  2400.                LunghezzaNome+DeltaLunghezzaNome
  2401.                ContatoreByteTraccia+1
  2402.               Until FineDeiDeltaLunghezzaNome=False
  2403.               NomeSequenza$=StripTrail$(Inkey$(LunghezzaNome),0)
  2404.               ContatoreByteTraccia+LunghezzaNome
  2405.               Sequenza()\Nome=NomeSequenza$
  2406.               If Panico{}=True
  2407.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2408.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2409.                Print " sequence name: ",Left$(NomeSequenza$,77-WCursX/8),"..."
  2410.                Panico=True
  2411.               Else
  2412.                If Panico=True
  2413.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2414.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2415.                 Panico=False
  2416.                EndIf
  2417.               EndIf
  2418.              Case #_TimeSignatureChange
  2419.               LunghezzaDatiDelTempo.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2420.               ContatoreByteTraccia+1
  2421.               Battiti=Asc(Inkey$)
  2422.               ContatoreByteTraccia+1
  2423.               If Panico{}=True
  2424.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2425.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2426.                If Battiti=1 Then Battiti$="beat" Else Battiti$="beats"
  2427.                Print Spazio$,Battiti,Spazio$,Battiti$,"..."
  2428.                Panico=True
  2429.               Else
  2430.                If Panico=True
  2431.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2432.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2433.                 Panico=False
  2434.                EndIf
  2435.               EndIf
  2436.               Misure=2^Asc(Inkey$)
  2437.               ContatoreByteTraccia+1
  2438.               If Panico{}=True
  2439.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2440.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2441.                If Misure=1 Then Misure$="measure" Else Misure$="measures"
  2442.                Print Spazio$,Misure,Spazio$,Misure$,"..."
  2443.                Panico=True
  2444.               Else
  2445.                If Panico=True
  2446.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2447.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2448.                 Panico=False
  2449.                EndIf
  2450.               EndIf
  2451.               TicPerBattito=Asc(Inkey$)
  2452.               If Panico{}=True
  2453.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2454.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2455.                If TicPerBattito=1 Then TicPerBattito$="tic per beat" Else TicPerBattito$="tics per beat"
  2456.                Print Spazio$,TicPerBattito,Spazio$,TicPerBattito$,"..."
  2457.                Panico=True
  2458.               Else
  2459.                If Panico=True
  2460.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2461.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2462.                 Panico=False
  2463.                EndIf
  2464.               EndIf
  2465.               ContatoreByteTraccia+1
  2466.               TrentaduesimiInUnQuarto.b=Asc(Inkey$)
  2467.               If Panico{}=True
  2468.                WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2469.                WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2470.           If TicPerBattito=1 Then TrentaduesimiInUnQuarto$="32th per quarter" Else  TrentaduesimiInUnQuarto$="32ths per quarter"
  2471.                Print Spazio$,TrentaduesimiInUnQuarto,Spazio$,TrentaduesimiInUnQuarto$,"..."
  2472.                Panico=True
  2473.               Else
  2474.                If Panico=True
  2475.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2476.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2477.                 Panico=False
  2478.                EndIf
  2479.               EndIf
  2480.               ContatoreByteTraccia+1
  2481.              Default
  2482.               LunghezzaMetaEvento=0
  2483.               Repeat
  2484.                DeltaLunghezzaMetaEvento.b=ConvertiOltreCentoventisetteInNegativo{Asc(Inkey$)}
  2485.                FineDeiDeltaLunghezzaMetaEvento.b=DeltaLunghezzaMetaEvento BitTst 7
  2486.                If Panico{}=True
  2487.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2488.                 WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": byte ",ContatoreByteTraccia," of ",LunghezzaTraccia,","
  2489.                 If FineDeiDeltaLunghezzaMetaEvento=True
  2490.                  Print " another meta event length value to add search..."
  2491.                 Else
  2492.                  Print " this was the last meta event length value to add..."
  2493.                 EndIf
  2494.                 Panico=True
  2495.                Else
  2496.                 If Panico=True
  2497.                  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2498.                  WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2499.                  Panico=False
  2500.                 EndIf
  2501.                EndIf
  2502.                DeltaLunghezzaMetaEvento BitClr 7
  2503.                LunghezzaMetaEvento+DeltaLunghezzaMetaEvento
  2504.                ContatoreByteTraccia+1
  2505.               Until FineDeiDeltaLunghezzaMetaEvento=False
  2506.               If LunghezzaMetaEvento>0
  2507.                ValoreMetaEvento$=Inkey$(LunghezzaMetaEvento)
  2508.                ContatoreByteTraccia+LunghezzaMetaEvento
  2509.                If Panico{}=True
  2510.                 WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2511.                 WLocate 0,0:WColour 3,0:Print Left$(ValoreMetaEvento$,80)
  2512.                 Panico=True
  2513.                Else
  2514.                 If Panico=True
  2515.                  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2516.                  WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2517.                  Panico=False
  2518.                 EndIf
  2519.                EndIf
  2520.               EndIf
  2521.              End Select
  2522.             EndIf
  2523.            Until NuovoByteDiStato=#_MetaEvent AND TipoDiMetaEvento=#_EndOfTrackChunk
  2524.            If Panico{}=True
  2525.             WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2526.             WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": ",ContatoreByteTraccia," of ",LunghezzaTraccia,"..."
  2527.             Panico=True
  2528.            Else
  2529.             If Panico=True
  2530.              WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2531.              WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": loading..."
  2532.              Panico=False
  2533.             EndIf
  2534.            EndIf
  2535.            If Panico{}=True
  2536.             WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2537.             WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": "
  2538.             If ContatoreByteTraccia=LunghezzaTraccia
  2539.              Print "bytes match! :-)"
  2540.             Else
  2541.              Print "bytes don't match! :-("
  2542.             EndIf
  2543.             Panico=True
  2544.            Else
  2545.             If Panico=True
  2546.              WLocate 0,0:WColour 0,0:Print SPACE$(80)
  2547.              WLocate 0,0:WColour 3,0:Print "Track ",Traccia+1,": end loading."
  2548.              Panico=False
  2549.             EndIf
  2550.            EndIf
  2551.           Else
  2552.            WLocate 0,0:WColour 3,0:Print "No datum found..."
  2553.           EndIf
  2554.          Else
  2555.           IlFileCaricatoNonEUnFileMIDI=True
  2556.           Pop If:Pop If:Pop Repeat:Pop If:Pop If:Pop If:Pop If:Pop If:Pop If
  2557.           Goto FineCicloCaricamento
  2558.          EndIf
  2559.          SequenzaNellaTraccia()\Traccia=Traccia+1
  2560.          SequenzaEsistente(Sequenza-1)=True
  2561.          Traccia(Traccia)=True
  2562.          SequenzaMassimaDaCreare+1
  2563.         EndIf
  2564.         Traccia+1
  2565.        Until Traccia=Tracce
  2566.       EndIf
  2567.      Else
  2568.       IlFileCaricatoNonEUnFileMIDI=True
  2569.       Pop If:Pop If:Pop If:Pop If:Pop If:Goto FineCicloCaricamento
  2570.      EndIf
  2571.     EndIf
  2572.    EndIf
  2573.   EndIf
  2574.  
  2575. FineCicloCaricamento
  2576.   CloseFile #FileMIDIDaCaricare
  2577.   PopInput
  2578.   WJam #UnColoreConSfondoTrasparente
  2579.  
  2580.   If IlFileCaricatoNonEUnFileMIDI=True
  2581.    EZRequest "AmySequencer message","This is not a MIDI file","OK"
  2582.   Else
  2583.    If CaricatoDalMenu=False
  2584.     For FileMIDIAperto.b=3 To 0 Step -1
  2585.      FileMIDIAperto$(FileMIDIAperto+1)=FileMIDIAperto$(FileMIDIAperto)
  2586.     Next FileMIDIAperto
  2587.     FileMIDIAperto$(0)=NomeDelFileMIDI$
  2588.     StoriaDeiFileMIDIAperti.b=WriteFile(#StoriaDeiFileMIDI,"LoadedMIDIFilesHistory")
  2589.     If StoriaDeiFileMIDIAperti=True
  2590.      FileOutput #StoriaDeiFileMIDI
  2591.      For FileMIDIAperto=0 To 4
  2592.       If FileMIDIAperto$(FileMIDIAperto)<>""
  2593.        NPrint FileMIDIAperto$(FileMIDIAperto)
  2594.      EndIf
  2595.      Next FileMIDIAperto
  2596.      CloseFile #StoriaDeiFileMIDI
  2597.      PopOutput
  2598.     EndIf
  2599.    EndIf
  2600.   EndIf
  2601.  EndIf
  2602. End Statement
  2603.  
  2604. ;-----------------------------------------------------------
  2605. ;questa procedura imposta i suoni da usare con il programma
  2606. ;this procedure sets sounds to use with the program
  2607. ;---------------------------------------------------
  2608. Statement EditoreSuoni{}
  2609. SHARED AltezzaFonte
  2610. SHARED AltezzaSchermo
  2611. SHARED CanaliAttivati
  2612. SHARED LarghezzaSchermo
  2613. SHARED PercorsoSuoni$
  2614. SHARED Suono()
  2615. SHARED TastoFuga$
  2616. SHARED XLunSlider
  2617. SHARED YLunSlider
  2618.  
  2619. ;-----------------------------------------------------------------------
  2620. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  2621. ;sets text menu colour to the brightest available
  2622. ;-------------------------------------------------
  2623.  MenuColour 3
  2624.  
  2625.  MenuTitle #ListaMenuEditoreSuoni,0,"Sounds"
  2626.  MenuItem #ListaMenuEditoreSuoni,0,0,0,"Load"
  2627.  MenuItem #ListaMenuEditoreSuoni,0,0,1,"Delete"
  2628.  
  2629.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  2630.  TipoFinestra.l=#BottoneChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  2631.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1
  2632.  LarghezzaInternaFinestraEditoreSuoni.w=InnerWidth
  2633.  AltezzaInternaFinestraEditoreSuoni.w=InnerHeight
  2634.  CloseWindow #FinestraEditoreSuoni
  2635.  
  2636. ;-------------------------------------------------------------------------------
  2637. ;imposta la barra di scorrimento che serve per visualizzare i suoni disponibili
  2638. ;sets the slider that is used to show the available sounds
  2639. ;----------------------------------------------------------
  2640.  XLunSlider=16
  2641.  YLunSlider=AltezzaInternaFinestraEditoreSuoni
  2642.  ImpostaSlider{#SliderEditoreSuoni,LarghezzaInternaFinestraEditoreSuoni-16,0,"VERTICAL",0,#ListaGadgetEditoreSuoni}
  2643.  
  2644.  Window #FinestraEditoreSuoni,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"Sounds Editor",-1,-1,#ListaGadgetEditoreSuoni
  2645.  
  2646. ;-------------------------------
  2647. ;attacca il menu' alla finestra
  2648. ;attaches menu to window
  2649. ;------------------------
  2650.  SetMenu #ListaMenuEditoreSuoni
  2651.  
  2652. ;----------------------------------------------
  2653. ;imposta la fonte di caratteri per la finestra
  2654. ;sets the font for the window
  2655. ;-----------------------------
  2656.  WindowFont #FonteDiCaratteriTopaz8
  2657.  
  2658.  WJam #DueColoriConSfondoPieno
  2659.  
  2660. ;-----------------------------------
  2661. ;sounds window's displacement start
  2662. ;-----------------------------------
  2663.  InizioSuoni.b=0
  2664.  
  2665. ;------------------------
  2666. ;maximum strings length
  2667. ;------------------------
  2668.  LunghezzaMassimaStringhe.b=(LarghezzaInternaFinestraEditoreSuoni-16)/8
  2669.  
  2670. ;---------------------------------
  2671. ;stated by mouse new sound number
  2672. ;---------------------------------
  2673.  NuovoSuonoIndicatoDalTopo.b=-1
  2674.  
  2675. ;-----------------------------
  2676. ;stated by mouse sound number
  2677. ;-----------------------------
  2678.  SuonoIndicatoDalTopo.b=-1
  2679.  
  2680. ;-------------------------------------------------------------------------
  2681. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  2682. ;sets the notes execution velocity slider
  2683. ;-----------------------------------------
  2684.  MostraSlider{#SliderEditoreSuoni,InizioSuoni,2,"VERTICAL",#ListaGadgetEditoreSuoni,#FinestraEditoreSuoni}
  2685.  
  2686.  Repeat
  2687.   If SecondoClicDelTopo.b=False
  2688.  
  2689.    WCls
  2690.  
  2691.    WLocate 0,0
  2692.  
  2693. ;----------------------
  2694. ;loaded sounds counter
  2695. ;----------------------
  2696.    SuoniCaricati=0
  2697.  
  2698.    For Suono.b=0 To 30
  2699.     AssegnamentoSuono$=Suono(InizioSuoni+Suono)\Nome
  2700.     If AssegnamentoSuono$<>""
  2701.      CanaleSuono.b=Suono(InizioSuoni+Suono)\Canale
  2702.      If CanaleSuono>0
  2703.       WColour CanaleSuono-1,16-CanaleSuono:Format "00":CanaleSuono$=" channel "+Str$(CanaleSuono):Format""
  2704.      Else
  2705.       WColour 1,0:CanaleSuono$=" no channel"
  2706.      EndIf
  2707.      AssegnamentoSuono$+CanaleSuono$
  2708.      AssegnamentoSuono$=Right$(AssegnamentoSuono$,LunghezzaMassimaStringhe)
  2709.      AssegnamentoSuono$+SPACE$(LunghezzaMassimaStringhe-Len(AssegnamentoSuono$))
  2710.      NPrint AssegnamentoSuono$
  2711.      If SuonoIndicatoDalTopo>-1 AND SuonoIndicatoDalTopo=InizioSuoni+Suono
  2712.       If CanaleSuono>0
  2713.        Wline 0,SuonoIndicatoDalTopo*8,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8+7,CanaleSuono-1
  2714.        Wline 0,SuonoIndicatoDalTopo*8+7,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8,CanaleSuono-1
  2715.       Else
  2716.        Wline 0,SuonoIndicatoDalTopo*8,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8+7,1
  2717.        Wline 0,SuonoIndicatoDalTopo*8+7,LarghezzaInternaFinestraEditoreSuoni-16,SuonoIndicatoDalTopo*8,1
  2718.       EndIf
  2719.      EndIf
  2720.      SuoniCaricati+1
  2721.     EndIf
  2722.    Next Suono
  2723.    SecondoClicDelTopo=True
  2724.   EndIf
  2725.  
  2726.   If SuoniCaricati=32
  2727.    Enable #ListaGadgetEditoreSuoni,#SliderEditoreSuoni
  2728.   Else
  2729.    Disable #ListaGadgetEditoreSuoni,#SliderEditoreSuoni
  2730.   EndIf
  2731.   Redraw #FinestraEditoreSuoni
  2732.  
  2733.   EventoFinestraEditoreSuoni.l=WaitEvent
  2734.  
  2735.   Select EventoFinestraEditoreSuoni
  2736.   Case #HaiPremutoUnTastoDelTopo
  2737.    TastoDelTopoCliccato.b=MButtons:YTopo=WMouseY
  2738.    Select TastoDelTopoCliccato
  2739.    Case #TastoSinistroDelTopoPremuto
  2740.     NuovoSuonoIndicatoDalTopo=YTopo/8+InizioSuoni
  2741.     If NuovoSuonoIndicatoDalTopo=SuonoIndicatoDalTopo
  2742.      If SuoniCaricati>0 AND SuonoIndicatoDalTopo<SuoniCaricati
  2743.       CanaleSuonoIndicatoDalTopo.b=Suono(SuonoIndicatoDalTopo)\Canale
  2744.       If CanaliAttivati=%1111111111111111
  2745.        Suono(SuonoIndicatoDalTopo)\Canale=0
  2746.        CanaliAttivati BitClr (CanaleSuonoIndicatoDalTopo-1)
  2747.       Else
  2748.        If CanaleSuonoIndicatoDalTopo>0
  2749.         If CanaleSuonoIndicatoDalTopo=16
  2750.          Suono(SuonoIndicatoDalTopo)\Canale=0
  2751.          CanaliAttivati BitClr 15
  2752.          CanaleSuono=0
  2753.         Else
  2754.          For CanaleSuono=1 To 15
  2755.           CanaleLibero.b=(CanaleSuono+CanaleSuonoIndicatoDalTopo-1) MOD 16
  2756.           If CanaliAttivati BitTst CanaleLibero=False
  2757.            Suono(SuonoIndicatoDalTopo)\Canale=CanaleLibero+1
  2758.            CanaliAttivati BitClr (CanaleSuonoIndicatoDalTopo-1)
  2759.            CanaliAttivati BitSet CanaleLibero
  2760.            Pop If:Pop For:Pop If:Pop If:Pop If:Goto FineCicloAssegnamentoCanali
  2761.           EndIf
  2762.          Next CanaleSuono
  2763.         EndIf
  2764.        Else
  2765.         For CanaleSuono=0 To 15
  2766.          If CanaliAttivati BitTst CanaleSuono=False
  2767.           Suono(SuonoIndicatoDalTopo)\Canale=CanaleSuono+1
  2768.           CanaliAttivati BitSet CanaleSuono
  2769.           Pop If:Pop For:Pop If:Pop If:Goto FineCicloAssegnamentoCanali
  2770.          EndIf
  2771.         Next CanaleSuono
  2772.        EndIf
  2773.       EndIf
  2774. FineCicloAssegnamentoCanali
  2775.       If CanaleSuono=16 Then EZRequest "AmySequencer Message","No free channel available","OK"
  2776.      EndIf
  2777.     Else
  2778.      SuonoIndicatoDalTopo=NuovoSuonoIndicatoDalTopo
  2779.     EndIf
  2780.     SecondoClicDelTopo=False
  2781.    Case #TastoSinistroDelTopoRilasciato
  2782.     SecondoClicDelTopo=True
  2783.    End Select
  2784. ;  Case #HaiPremutoUnBottone
  2785. ;   InizioSuoni=ValoreSlider{#SliderEditoreSuoni,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  2786. ;   SecondoClicDelTopo=False
  2787.   Case #HaiRilasciatoUnBottone
  2788.    InizioSuoni=ValoreSlider{#SliderEditoreSuoni,2,AltezzaInternaFinestraEditoreSuoni,"VERTICAL",#ListaGadgetEditoreSuoni}
  2789.    SecondoClicDelTopo=False
  2790.   Case #HaiAttivatoIlMenu
  2791.    If MenuHit=0 AND ItemHit=0
  2792.     If SuoniCaricati<32
  2793.      MaxLen PercorsoSuoni$=160
  2794.      MaxLen NomeSuono$=64
  2795.      NomeSuono$=FileRequest$("Load a sound...",PercorsoSuoni$,NomeSuono$)
  2796.      If NomeSuono$<>""
  2797.       StessoSuono.b=False
  2798.       If SuoniCaricati>0
  2799.        For SuonoPrecedente=0 To SuoniCaricati-1
  2800.         If NomeSuono$=Suono(SuonoPrecedente)\Nome Then StessoSuono=True
  2801.        Next SuonoPrecedente
  2802.       EndIf
  2803.       If StessoSuono=False
  2804.        Suono=SuoniCaricati
  2805.        LoadSound Suono,NomeSuono$
  2806.        Suono(Suono)\Nome=NomeSuono$
  2807.        Sound Suono,3
  2808.       EndIf
  2809.      EndIf
  2810.     Else
  2811.      EZRequest "AmySequencer message","You cannot load more sounds","OK"
  2812.     EndIf
  2813.    EndIf
  2814.    If MenuHit=0 AND ItemHit=1
  2815.     If SuoniCaricati>0 AND SuonoIndicatoDalTopo<SuoniCaricati AND SuonoIndicatoDalTopo>-1
  2816.      Suono=SuonoIndicatoDalTopo
  2817.      Free Sound Suono
  2818.      Suono(Suono)\Nome=""
  2819.      While Suono+1<SuoniCaricati
  2820.       Suono(Suono)\Nome=Suono(Suono+1)\Nome
  2821.       Suono(Suono)\Canale=Suono(Suono+1)\Canale
  2822.       Suono+1
  2823.      Wend
  2824.      Suono(Suono)\Nome=""
  2825.      CanaliAttivati BitClr (Suono(Suono)\Canale-1)
  2826.      Suono(Suono)\Canale=0
  2827.      SuonoIndicatoDalTopo=-1
  2828.     Else
  2829.      EZRequest "AmySequencer message","You must load a sound first","OK"
  2830.     EndIf
  2831.    EndIf
  2832.    SecondoClicDelTopo=False
  2833.   Case #HaiChiusoLaFinestra
  2834.    EsciDallEditoreSuoni.b=True
  2835.   Case #HaiPremutoUnTasto
  2836.    TastoPremuto$=LCase$(Inkey$)
  2837.    Select TastoPremuto$
  2838.    Case TastoFuga$
  2839.     EsciDallEditoreSuoni=True
  2840.    End Select
  2841.    SecondoClicDelTopo=True
  2842.   End Select
  2843.   FlushEvents
  2844.  Until EsciDallEditoreSuoni=True
  2845.  CloseWindow #FinestraEditoreSuoni
  2846.  Use Window #FinestraPrincipale
  2847.  WJam #UnColoreConSfondoTrasparente
  2848. End Statement
  2849.  
  2850. ;-----------------------------------------------------
  2851. ;questa procedura cancella a video un evento musicale
  2852. ;this procedure clears on screen a musical event
  2853. ;------------------------------------------------
  2854. Statement CancellaUnEventoMusicale{TipoDiEventoMusicale$,Evento.w,InizioEvento.l,DurataEvento.l,StatoEvento.b}
  2855. SHARED AltezzaInternaFinestraEditoreSequenza
  2856. SHARED AreaVisibileDeiValori
  2857. SHARED LarghezzaInternaFinestraEditoreSequenza
  2858. SHARED ScalaEventiMusicali
  2859. SHARED TipoDiNota()
  2860. SHARED XInizioAreaVisibile
  2861. SHARED YInizioAreaVisibile
  2862.  SelezioneEventoMusicale.b=StatoEvento & #EventoMusicaleSelezionato
  2863.  EventoMusicaleTagliato.b=StatoEvento & #EventoMusicaleTagliato
  2864.  EventoMusicaleCopiato.b=StatoEvento & #EventoMusicaleCopiato
  2865.  Select TipoDiEventoMusicale$
  2866.  Case "Note"
  2867.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  2868.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  2869.    InizioNota.l=InizioEvento:FineNota.l=InizioNota+DurataEvento-1
  2870.    I.w=16+(InizioNota-XInizioAreaVisibile)/ScalaEventiMusicali
  2871.    F.w=16+(FineNota-XInizioAreaVisibile)/ScalaEventiMusicali
  2872.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  2873.     InizioNotaVisibile.b=True
  2874.    Else
  2875.     InizioNotaVisibile=False
  2876.    EndIf
  2877.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  2878.     FineNotaVisibile.b=True
  2879.    Else
  2880.     FineNotaVisibile=False
  2881.    EndIf
  2882.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  2883.     NotaVisibile.b=True
  2884.    Else
  2885.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  2886.      NotaVisibile=True
  2887.     Else
  2888.      NotaVisibile=False
  2889.     EndIf
  2890.    EndIf
  2891.    If NotaVisibile=True
  2892.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2893.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2894.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  2895.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  2896.     If TipoDiNota(Nota)\Diesis=True
  2897.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,0
  2898.     Else
  2899.      WBox X0Nota,Y0Nota,X1Nota,Y1Nota,3
  2900.     EndIf
  2901.    EndIf
  2902.   EndIf
  2903.  Case "Program"
  2904.   FineProgramma.l=InizioEvento+Len("Program000")*8-1
  2905.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineProgramma+Len("X")*8
  2906.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineProgramma+Len("Cu")*8
  2907.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineProgramma+Len("Co")*8
  2908.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2909.   F=16+(FineProgramma-XInizioAreaVisibile)/ScalaEventiMusicali
  2910.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2911.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2912.    Programma.b=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  2913.    For Linea.b=0 To 7
  2914.     Y.w=Programma+Linea
  2915.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2916.      Wline I,Y,FineProgramma,Y,0
  2917.     Else
  2918.      Wline I,Y,FineProgramma,Y,3
  2919.     EndIf
  2920.    Next Linea
  2921.   EndIf
  2922.  Case "Control"
  2923.   FineControllo.l=InizioEvento+Len("Control000")*8-1
  2924.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineControllo+Len("X")*8
  2925.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineControllo+Len("Cu")*8
  2926.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineControllo+Len("Co")*8
  2927.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2928.   F=16+(FineControllo-XInizioAreaVisibile)/ScalaEventiMusicali
  2929.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2930.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2931.    Controllo.w=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  2932.    For Linea.b=0 To 7
  2933.     Y=Controllo+Linea
  2934.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2935.      Wline I,Y,FineControllo,Y,0
  2936.     Else
  2937.      Wline I,Y,FineControllo,Y,3
  2938.     EndIf
  2939.    Next Linea
  2940.   EndIf
  2941.  Case "PolyAftertouch"
  2942.   FinePressioneMultipla.l=InizioEvento+Len("Poly000")*8-1
  2943.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneMultipla+Len("X")*8
  2944.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneMultipla+Len("Cu")*8
  2945.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneMultipla+Len("Co")*8
  2946.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2947.   F=16+(FinePressioneMultipla-XInizioAreaVisibile)/ScalaEventiMusicali
  2948.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2949.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2950.    PressioneMultipla.w=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  2951.    For Linea.b=0 To 7
  2952.     Y=PressioneMultipla+Linea
  2953.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2954.      Wline I,Y,FinePressioneMultipla,Y,0
  2955.     Else
  2956.      Wline I,Y,FinePressioneMultipla,Y,3
  2957.     EndIf
  2958.    Next Linea
  2959.   EndIf
  2960.  Case "MonoAftertouch"
  2961.   FinePressioneSingola.l=InizioEvento+Len("Mono000")*8-1
  2962.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneSingola+Len("X")*8
  2963.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneSingola+Len("Cu")*8
  2964.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneSingola+Len("Co")*8
  2965.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2966.   F=16+(FinePressioneSingola-XInizioAreaVisibile)/ScalaEventiMusicali
  2967.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2968.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2969.    PressioneSingola.w=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  2970.    For Linea.b=0 To 7
  2971.     Y=PressioneSingola+Linea
  2972.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2973.      Wline I,Y,FinePressioneSingola,Y,0
  2974.     Else
  2975.      Wline I,Y,FinePressioneSingola,Y,3
  2976.     EndIf
  2977.    Next Linea
  2978.   EndIf
  2979.  Case "PitchBend"
  2980.   FineCurvaDiPicco.l=InizioEvento+Len("Bend+0000")*8-1
  2981.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineCurvaDiPicco+Len("X")*8
  2982.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineCurvaDiPicco+Len("Cu")*8
  2983.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineCurvaDiPicco+Len("Co")*8
  2984.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  2985.   F=16+(FineCurvaDiPicco-XInizioAreaVisibile)/ScalaEventiMusicali
  2986.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  2987.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  2988.    CurvaDiPicco.w=(AreaVisibileDeiValori-1)*1.0*(127-Evento/128)/127
  2989.    For Linea.b=0 To 7
  2990.     Y=CurvaDiPicco+Linea
  2991.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  2992.      Wline I,Y,FineCurvaDiPicco,Y,0
  2993.     Else
  2994.      Wline I,Y,FineCurvaDiPicco,Y,3
  2995.     EndIf
  2996.    Next Linea
  2997.   EndIf
  2998.  Case "Tempo"
  2999.   FineTempo.l=InizioEvento+Len("Tempo00/000")*8-1
  3000.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineTempo+Len("X")*8
  3001.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineTempo+Len("Cu")*8
  3002.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineTempo+Len("Co")*8
  3003.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3004.   F=16+(FineTempo-XInizioAreaVisibile)/ScalaEventiMusicali
  3005.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3006.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  3007.    Tempo.w=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  3008.    For Linea.b=0 To 7
  3009.     Y=Tempo+Linea
  3010.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  3011.      Wline I,Y,FineTempo,Y,0
  3012.     Else
  3013.      Wline I,Y,FineTempo,Y,3
  3014.     EndIf
  3015.    Next Linea
  3016.   EndIf
  3017.  Case "BPM"
  3018.   FineBattutePerMinuto.l=InizioEvento+Len("BPM000")*8-1
  3019.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineBattutePerMinuto+Len("X")*8
  3020.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineBattutePerMinuto+Len("Cu")*8
  3021.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineBattutePerMinuto+Len("Co")*8
  3022.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3023.   F=16+(FineBattutePerMinuto-XInizioAreaVisibile)/ScalaEventiMusicali
  3024.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3025.    I=Max(I,16):F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)
  3026.    BattutePerMinuto.w=(AreaVisibileDeiValori-1)*1.0*(97-(Evento-9)/3)/97
  3027.    For Linea.b=0 To 7
  3028.     Y=BattutePerMinuto+Linea
  3029.     If TipoDiNota(127-YInizioAreaVisibile-Y/8)\Diesis=True
  3030.      Wline I,Y,FineBattutePerMinuto,Y,0
  3031.     Else
  3032.      Wline I,Y,FineBattutePerMinuto,Y,3
  3033.     EndIf
  3034.    Next Linea
  3035.   EndIf
  3036.  End Select
  3037. End Statement
  3038.  
  3039. ;--------------------------------------------
  3040. ;questa procedura disegna un evento musicale
  3041. ;this procedure draws a musical events
  3042. ;--------------------------------------
  3043. Statement DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento.w,InizioEvento.l,DurataEvento.l,CanaleEvento.b,StatoEvento.b}
  3044. SHARED AltezzaInternaFinestraEditoreSequenza
  3045. SHARED AreaVisibileDeiValori
  3046. SHARED LarghezzaInternaFinestraEditoreSequenza
  3047. SHARED ScalaEventiMusicali
  3048. SHARED XInizioAreaVisibile
  3049. SHARED YInizioAreaVisibile
  3050.  SelezioneEventoMusicale.b=StatoEvento & #EventoMusicaleSelezionato
  3051.  EventoMusicaleTagliato.b=StatoEvento & #EventoMusicaleTagliato
  3052.  EventoMusicaleCopiato.b=StatoEvento & #EventoMusicaleCopiato
  3053.  EventoMusicaleEseguito.b=StatoEvento & #EventoMusicaleEseguito
  3054.  Select TipoDiEventoMusicale$
  3055.  Case "Note"
  3056.   NotaVisualizzata.w=(127-Evento-YInizioAreaVisibile)*8
  3057.   If NotaVisualizzata>=0 AND NotaVisualizzata+7<=AltezzaInternaFinestraEditoreSequenza-8-8
  3058.    FineNota.l=InizioEvento+DurataEvento-1
  3059.    I.w=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3060.    F.w=16+(FineNota-XInizioAreaVisibile)/ScalaEventiMusicali
  3061.    If I>=16 AND I<LarghezzaInternaFinestraEditoreSequenza
  3062.     InizioNotaVisibile.b=True
  3063.    Else
  3064.     InizioNotaVisibile=False
  3065.    EndIf
  3066.    If F>=16 AND F<LarghezzaInternaFinestraEditoreSequenza
  3067.     FineNotaVisibile.b=True
  3068.    Else
  3069.     FineNotaVisibile=False
  3070.    EndIf
  3071.    If I<16 AND F>LarghezzaInternaFinestraEditoreSequenza
  3072.     NotaVisibile.b=True
  3073.    Else
  3074.     If InizioNotaVisibile=True OR FineNotaVisibile=True
  3075.      NotaVisibile=True
  3076.     Else
  3077.      NotaVisibile=False
  3078.     EndIf
  3079.    EndIf
  3080.    If NotaVisibile=True
  3081.     X0Nota=Min(Max(I,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3082.     Y0Nota=Min(Max(NotaVisualizzata,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  3083.     X1Nota=Min(Max(F,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3084.     Y1Nota=Min(Max(NotaVisualizzata+7,0),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  3085.     WBox X0Nota,Y0Nota,X1Nota,Y1Nota,16-CanaleEvento
  3086.     If EventoMusicaleEseguito=0
  3087.  
  3088.      If EventoMusicaleTagliato=#EventoMusicaleTagliato
  3089.       WLocate X0Nota,Y0Nota:WColour CanaleEvento-1,16-CanaleEvento:Print Left$("Cutted",(X1Nota-X0Nota+1)/8)
  3090.      EndIf
  3091.      If EventoMusicaleCopiato=#EventoMusicaleCopiato
  3092.       WLocate X0Nota,Y0Nota:WColour CanaleEvento-1,16-CanaleEvento:Print Left$("Copied",(X1Nota-X0Nota+1)/8)
  3093.      EndIf
  3094.  
  3095.      If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  3096.       Wline X0Nota,NotaVisualizzata,X1Nota,NotaVisualizzata+7,CanaleEvento-1
  3097.       Wline X0Nota,NotaVisualizzata+7,X1Nota,NotaVisualizzata,CanaleEvento-1
  3098.      EndIf
  3099.      If SelezioneEventoMusicale=#EventoMusicaleNonSelezionato
  3100.       Wline X0Nota+1,NotaVisualizzata+1,X1Nota-1,NotaVisualizzata+1,CanaleEvento-1
  3101.       Wline X0Nota+1,NotaVisualizzata+6,X1Nota-1,NotaVisualizzata+6,CanaleEvento-1
  3102.      EndIf
  3103.      If SelezioneEventoMusicale=#EventoMusicaleNonSelezionato
  3104.       If InizioNotaVisibile=True
  3105.        Wline I+1,NotaVisualizzata+1,I+1,NotaVisualizzata+6,CanaleEvento-1
  3106.       EndIf
  3107.       If FineNotaVisibile=True
  3108.        Wline F-1,NotaVisualizzata+1,F-1,NotaVisualizzata+6,CanaleEvento-1
  3109.       EndIf
  3110.      EndIf
  3111.     EndIf
  3112.    EndIf
  3113.   EndIf
  3114.  Case "Program"
  3115.   FineProgramma.l=InizioEvento+Len("Program000")*8-1
  3116.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineProgramma+Len("X")*8
  3117.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineProgramma+Len("Cu")*8
  3118.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineProgramma+Len("Co")*8
  3119.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3120.   F=16+FineProgramma-XInizioAreaVisibile
  3121.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3122.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  3123.     WColour 3,16-CanaleEvento
  3124.    Else
  3125.     WColour CanaleEvento-1,16-CanaleEvento
  3126.    EndIf
  3127.    Format "000":Programma$="Program"+Str$(Evento):Format ""
  3128.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Programma$+"X"
  3129.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Programma$+"Cu"
  3130.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Programma$+"Co"
  3131.    If I<0 Then IniziaPrima.b=True
  3132.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo.b=True
  3133.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  3134.    Y.w=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  3135.    If IniziaPrima=True Then Programma$=Right$(Programma$,(F-I+1)/8)
  3136.    If FinisceDopo=True Then Programma$=Left$(Programma$,(F-I+1)/8)
  3137.    WLocate 16+I,Y:Print Programma$
  3138.   EndIf
  3139.  Case "Control"
  3140.   FineControllo.l=InizioEvento+Len("Control000")*8-1
  3141.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineControllo+Len("X")*8
  3142.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineControllo+Len("Cu")*8
  3143.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineControllo+Len("Co")*8
  3144.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3145.   F=16+FineControllo-XInizioAreaVisibile
  3146.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3147.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  3148.     WColour 3,16-CanaleEvento
  3149.    Else
  3150.     WColour CanaleEvento-1,16-CanaleEvento
  3151.    EndIf
  3152.    Format "000":Controllo$="Control"+Str$(Evento):Format ""
  3153.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Controllo$+"X"
  3154.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Controllo$+"Cu"
  3155.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Controllo$+"Co"
  3156.    If I<0 Then IniziaPrima=True
  3157.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  3158.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  3159.    Y=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  3160.    If IniziaPrima=True Then Controllo$=Right$(Controllo$,(F-I+1)/8)
  3161.    If FinisceDopo=True Then Controllo$=Left$(Controllo$,(F-I+1)/8)
  3162.    WLocate 16+I,Y:Print Controllo$
  3163.   EndIf
  3164.  Case "PolyAftertouch"
  3165.   FinePressioneMultipla.l=InizioEvento+Len("Poly000")*8-1
  3166.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneMultipla+Len("X")*8
  3167.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneMultipla+Len("Cu")*8
  3168.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneMultipla+Len("Co")*8
  3169.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3170.   F=16+FinePressioneMultipla-XInizioAreaVisibile
  3171.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3172.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  3173.     WColour 3,16-CanaleEvento
  3174.    Else
  3175.     WColour CanaleEvento-1,16-CanaleEvento
  3176.    EndIf
  3177.    Format "000":PressioneMultipla$="Poly"+Str$(Evento):Format ""
  3178.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then PressioneMultipla$+"X"
  3179.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then PressioneMultipla$+"Cu"
  3180.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then PressioneMultipla$+"Co"
  3181.    If I<0 Then IniziaPrima=True
  3182.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  3183.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  3184.    Y=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  3185.    If IniziaPrima=True Then PressioneMultipla$=Right$(PressioneMultipla$,(F-I+1)/8)
  3186.    If FinisceDopo=True Then PressioneMultipla$=Left$(PressioneMultipla$,(F-I+1)/8)
  3187.    WLocate 16+I,Y:Print PressioneMultipla$
  3188.   EndIf
  3189.  Case "MonoAftertouch"
  3190.   FinePressioneSingola.l=InizioEvento+Len("Mono000")*8-1
  3191.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FinePressioneSingola+Len("X")*8
  3192.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FinePressioneSingola+Len("Cu")*8
  3193.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FinePressioneSingola+Len("Co")*8
  3194.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3195.   F=16+FinePressioneSingola-XInizioAreaVisibile
  3196.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3197.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  3198.     WColour 3,16-CanaleEvento
  3199.    Else
  3200.     WColour CanaleEvento-1,16-CanaleEvento
  3201.    EndIf
  3202.    Format "000":PressioneSingola$="Mono"+Str$(Evento):Format ""
  3203.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then PressioneSingola$+"X"
  3204.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then PressioneSingola$+"Cu"
  3205.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Print PressioneSingola$+"Co"
  3206.    If I<0 Then IniziaPrima=True
  3207.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  3208.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  3209.    Y=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  3210.    If IniziaPrima=True Then PressioneSingola$=Right$(PressioneSingola$,(F-I+1)/8)
  3211.    If FinisceDopo=True Then PressioneSingola$=Left$(PressioneSingola$,(F-I+1)/8)
  3212.    WLocate 16+I,Y:Print PressioneSingola$
  3213.   EndIf
  3214.  Case "PitchBend"
  3215.   FineCurvaDiPicco.l=InizioEvento+Len("Bend+0000")*8-1
  3216.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineCurvaDiPicco+Len("X")*8
  3217.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineCurvaDiPicco+Len("Cu")*8
  3218.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineCurvaDiPicco+Len("Co")*8
  3219.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3220.   F=16+FineCurvaDiPicco-XInizioAreaVisibile
  3221.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3222.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  3223.     WColour 3,16-CanaleEvento
  3224.    Else
  3225.     WColour CanaleEvento-1,16-CanaleEvento
  3226.    EndIf
  3227.    Format "+0000":CurvaDiPicco$="Bend"+Str$(Evento-#_PitchBendCenter):Format ""
  3228.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then CurvaDiPicco$+"X"
  3229.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then CurvaDiPicco$+"Cu"
  3230.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then CurvaDiPicco$+"Co"
  3231.    If I<0 Then IniziaPrima=True
  3232.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  3233.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  3234.    Y=(AreaVisibileDeiValori-1)*1.0*(127-Evento/128)/127
  3235.    If IniziaPrima=True Then CurvaDiPicco$=Right$(CurvaDiPicco$,(F-I+1)/8)
  3236.    If FinisceDopo=True Then CurvaDiPicco$=Left$(CurvaDiPicco$,(F-I+1)/8)
  3237.    WLocate 16+I,Y:Print CurvaDiPicco$
  3238.   EndIf
  3239.  Case "Tempo"
  3240.   FineTempo.l=InizioEvento+Len("Tempo00/000")*8-1
  3241.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineTempo+Len("X")*8
  3242.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineTempo+Len("Cu")*8
  3243.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineTempo+Len("Co")*8
  3244.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3245.   F=16+FineTempo-XInizioAreaVisibile
  3246.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3247.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  3248.     WColour 3,16-CanaleEvento
  3249.    Else
  3250.     WColour CanaleEvento-1,16-CanaleEvento
  3251.    EndIf
  3252.    Format "00":Tempo$="Tempo"+Str$(Evento MOD 16+1)
  3253.    Format "000":Tempo$+"/"+Str$(2^(Evento/16))
  3254.    Format ""
  3255.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then Tempo$+"X"
  3256.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then Tempo$+"Cu"
  3257.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then Tempo$+"Co"
  3258.    If I<0 Then IniziaPrima=True
  3259.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  3260.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  3261.    Y=(AreaVisibileDeiValori-1)*1.0*(127-Evento)/127
  3262.    If IniziaPrima=True Then Tempo$=Right$(Tempo$,(F-I+1)/8)
  3263.    If FinisceDopo=True Then Tempo$=Left$(Tempo$,(F-I+1)/8)
  3264.    WLocate 16+I,Y:Print Tempo$
  3265.   EndIf
  3266.  Case "BPM"
  3267.   FineBattutePerMinuto.l=InizioEvento+Len("BPM000")*8-1
  3268.   If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then FineBattutePerMinuto+Len("X")*8
  3269.   If EventoMusicaleTagliato=#EventoMusicaleTagliato Then FineBattutePerMinuto+Len("Cu")*8
  3270.   If EventoMusicaleCopiato=#EventoMusicaleCopiato Then FineBattutePerMinuto+Len("Co")*8
  3271.   I=16+(InizioEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3272.   F=16+FineBattutePerMinuto-XInizioAreaVisibile
  3273.   If I>=16 OR I<LarghezzaInternaFinestraEditoreSequenza OR F>=16 OR F<LarghezzaInternaFinestraEditoreSequenza
  3274.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  3275.     WColour 3,16-CanaleEvento
  3276.    Else
  3277.     WColour CanaleEvento-1,16-CanaleEvento
  3278.    EndIf
  3279.    Format "000":BattutePerMinuto$="BPM"+Str$(Evento):Format ""
  3280.    If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then BattutePerMinuto$+"X"
  3281.    If EventoMusicaleTagliato=#EventoMusicaleTagliato Then BattutePerMinuto$+"Cu"
  3282.    If EventoMusicaleCopiato=#EventoMusicaleCopiato Then BattutePerMinuto$+"Co"
  3283.    If I<0 Then IniziaPrima=True
  3284.    If F>LarghezzaInternaFinestraEditoreSequenza-1 Then FinisceDopo=True
  3285.    I=Max(I,16)-16:F=Min(F,LarghezzaInternaFinestraEditoreSequenza-1)-16
  3286.    Y=(AreaVisibileDeiValori-1)*1.0*(97-(Evento-9)/3)/97
  3287.    If IniziaPrima=True Then BattutePerMinuto$=Right$(BattutePerMinuto$,(F-I+1)/8)
  3288.    If FinisceDopo=True Then BattutePerMinuto$=Left$(BattutePerMinuto$,(F-I+1)/8)
  3289.    WLocate 16+I,Y:Print BattutePerMinuto$
  3290.   EndIf
  3291.  End Select
  3292. End Statement
  3293.  
  3294. ;---------------------------------------------------------------
  3295. ;questa procedura mostra la scala di visualizzazione delle note
  3296. ;this procedure shows the note scale of notes displaying
  3297. ;--------------------------------------------------------
  3298. Statement MostraLaScalaDegliEventiMusicali{Ritardo.b}
  3299. SHARED AltezzaInternaFinestraEditoreSequenza
  3300. SHARED ColoriOriginali
  3301. SHARED ScalaEventiMusicali
  3302. ; For Scatola.b=0 To 4
  3303. ;  Y0Scatola.w=AltezzaInternaFinestraEditoreSequenza-8-8
  3304. ;  WBox Scatola,Y0Scatola+Scatola,15-Scatola,Y0Scatola+7-Scatola,15-Scatola
  3305. ; Next Scatola
  3306.  Select ScalaEventiMusicali
  3307.  Case 1
  3308.   Ingrandimento.b=1
  3309.  Case 2
  3310.   Ingrandimento=2
  3311.  Case 4
  3312.   Ingrandimento=3
  3313.  Case 8
  3314.   Ingrandimento=4
  3315.  Case 16
  3316.   Ingrandimento=5
  3317.  Case 32
  3318.   Ingrandimento=6
  3319.  Case 64
  3320.   Ingrandimento=7
  3321.  End Select
  3322.  WLocate 0,AltezzaInternaFinestraEditoreSequenza-8-8:WColour 2,1
  3323.  Print "Z",Ingrandimento
  3324.  If Ritardo=True Then Delay_ 50
  3325.  WLocate 0,AltezzaInternaFinestraEditoreSequenza-8-8
  3326.  Print "+-"
  3327. End Statement
  3328.  
  3329. Statement MostraITastiDaUsare{}
  3330.  MostraITastiDaUsare$="Esc>.........leave the editor|"
  3331.  MostraITastiDaUsare$+"Space>.......insert a rest|"
  3332.  MostraITastiDaUsare$+"|"
  3333.  MostraITastiDaUsare$+"No selected event:|"
  3334.  MostraITastiDaUsare$+"Cursor up>...scroll window up|"
  3335.  MostraITastiDaUsare$+"Cursor down>.scroll window down|"
  3336.  MostraITastiDaUsare$+"Cursor left>.scroll window backward|"
  3337.  MostraITastiDaUsare$+"Cursor right>scroll window forward|"
  3338.  MostraITastiDaUsare$+"Backspace>...delete last event|"
  3339.  MostraITastiDaUsare$+"|"
  3340.  MostraITastiDaUsare$+"No selected event plus shift:|"
  3341.  MostraITastiDaUsare$+"Cursor left>.move insertion point backward|"
  3342.  MostraITastiDaUsare$+"Cursor right>move insertion point forward|"
  3343.  MostraITastiDaUsare$+"Backspace>...delete last event"
  3344.  EZRequest "AmySequencer help",MostraITastiDaUsare$,"OK"
  3345.  
  3346.  MostraITastiDaUsare$="With selected events:|"
  3347.  MostraITastiDaUsare$+"Cursor up>...inc sel events/tempo beat|"
  3348.  MostraITastiDaUsare$+"Cursor down>.dec sel events/tempo beat|"
  3349.  MostraITastiDaUsare$+"Cursor left>.move sel events forward|"
  3350.  MostraITastiDaUsare$+"Cursor right>move sel events backward|"
  3351.  MostraITastiDaUsare$+"Backspace>...delete last event|"
  3352.  MostraITastiDaUsare$+"|"
  3353.  MostraITastiDaUsare$+"With selected events plus shift:|"
  3354.  MostraITastiDaUsare$+"Cursor up>...move sel notes up of one octave|"
  3355.  MostraITastiDaUsare$+"             inc sel events of 8|"
  3356.  MostraITastiDaUsare$+"             inc sel BPM events of 10|"
  3357.  MostraITastiDaUsare$+"             inc sel tempo events measure|"
  3358.  MostraITastiDaUsare$+"Cursor down>.move sel notes down of one octave|"
  3359.  MostraITastiDaUsare$+"             dec sel events of 8|"
  3360.  MostraITastiDaUsare$+"             dec sel BMP events of 10|"
  3361.  MostraITastiDaUsare$+"             dec sel tempo events measure|"
  3362.  MostraITastiDaUsare$+"Cursor left>.stretch sel notes backward|"
  3363.  MostraITastiDaUsare$+"Cursor right>stretch sel notes forward|"
  3364.  MostraITastiDaUsare$+"Backspace>...delete all sel events"
  3365.  EZRequest "AmySequencer help",MostraITastiDaUsare$,"OK"
  3366.  
  3367. End Statement
  3368.  
  3369. Statement MostraLaMappaturaDelleNoteSullaTastiera{}
  3370.  MostraLaMappaturaDelleNoteSullaTastiera$="Note    lo octave hi octave|"
  3371.  MostraLaMappaturaDelleNoteSullaTastiera$+"C--Do  >........Z.........Q|"
  3372.  MostraLaMappaturaDelleNoteSullaTastiera$+"C#-Do# >........S.........2|"
  3373.  MostraLaMappaturaDelleNoteSullaTastiera$+"D--Re  >........X.........W|"
  3374.  MostraLaMappaturaDelleNoteSullaTastiera$+"D#-Re# >........D.........3|"
  3375.  MostraLaMappaturaDelleNoteSullaTastiera$+"E--Mi  >........C.........E|"
  3376.  MostraLaMappaturaDelleNoteSullaTastiera$+"F--Fa  >........V.........R|"
  3377.  MostraLaMappaturaDelleNoteSullaTastiera$+"F#-Fa# >........G.........5|"
  3378.  MostraLaMappaturaDelleNoteSullaTastiera$+"G--Sol >........B.........T|"
  3379.  MostraLaMappaturaDelleNoteSullaTastiera$+"G#-Sol#>........H.........6|"
  3380.  MostraLaMappaturaDelleNoteSullaTastiera$+"A--La  >........N.........Y|"
  3381.  MostraLaMappaturaDelleNoteSullaTastiera$+"A#-La# >........J.........7|"
  3382.  MostraLaMappaturaDelleNoteSullaTastiera$+"B--Si  >........M.........U|"
  3383.  MostraLaMappaturaDelleNoteSullaTastiera$+"|"
  3384.  MostraLaMappaturaDelleNoteSullaTastiera$+"function keys to select octave"
  3385.  EZRequest "AmySequencer help",MostraLaMappaturaDelleNoteSullaTastiera$,"OK"
  3386. End Statement
  3387.  
  3388. Statement ProgressioneEventiMusicaliCurvaDiPicco{InizioProgressione.w,FineProgressione.w}
  3389. SHARED CanaleSelezionato
  3390. SHARED EventiMusicali
  3391. SHARED EventiMusicaliSelezionati
  3392. SHARED EventoMusicale()
  3393. SHARED LarghezzaEventoBase
  3394. SHARED SequenzaSelezionata
  3395. SHARED XInizioAreaVisibile
  3396.  If CanaleSelezionato>0
  3397.   Valori.b=EZRequest("AmySequencer message","How many inner values|for the progression?","1|2|4|8|16|32|64|Cancel")
  3398.   If Valori=0 Then Statement Return
  3399.   Valori=2+2^(Valori-1)
  3400.   Passo.w=(FineProgressione-InizioProgressione)/(Valori-1)
  3401.   LastItem EventoMusicale()
  3402.   For Valore.w=InizioProgressione To FineProgressione Step Passo
  3403.    If AddItem(EventoMusicale())=True
  3404.     EventoMusicale()\Tipo="PitchBend"
  3405.     EventoMusicale()\Evento=Valore/128
  3406.     EventoMusicale()\Valore=Valore MOD 128
  3407.     EventoMusicale()\Inizio=XInizioAreaVisibile+LarghezzaEventoBase/(Valori-1)*Abs(Valore-InizioProgressione)/Passo
  3408.     EventoMusicale()\Durata=2
  3409.     EventoMusicale()\Canale=CanaleSelezionato
  3410.     EventoMusicale()\Sequenza=SequenzaSelezionata
  3411.     EventoMusicale()\Stato=#EventoMusicaleNonSelezionato
  3412.     EventiMusicali+1
  3413.     EventiMusicaliSelezionati+1
  3414.    Else
  3415.     EZRequest "AmySequencer message","You have used all the available events","OK"
  3416.     ProgressioneInterrotta.b=True
  3417.     Pop For:Goto FineCicloForProgressione
  3418.    EndIf
  3419.   Next Valore
  3420. FineCicloForProgressione
  3421.   If ProgressioneInterrotta=False Then EZRequest "AmySequencer message","Progression successfully completed!","OK"
  3422.  Else
  3423.   EZRequest "AmySequencer message","You must select a channel first","OK"
  3424.  EndIf
  3425. End Statement
  3426.  
  3427. ;-----------------------------------------------------------------------
  3428. ;questa procedura permette di cambiare i parametri dell'evento corrente
  3429. ;this procedure permits to change the current event parameters
  3430. ;--------------------------------------------------------------
  3431. Statement CambiaLEventoBase{}
  3432. SHARED AltezzaFonte
  3433. SHARED ColoriOriginali
  3434. SHARED EventiMusicaliSelezionati
  3435. SHARED EventoMusicale()
  3436. SHARED LarghezzaEventoBase
  3437. SHARED ParlatoAttivato
  3438. SHARED TastoCursoreDestra$
  3439. SHARED TastoCursoreSinistra$
  3440. SHARED TastoFuga$
  3441. SHARED TipoDiEventoMusicaleDiBase$
  3442. SHARED ValoreEventoBase
  3443. SHARED XLunSlider
  3444. SHARED YLunSlider
  3445.  TipoFinestra.l=#FinestraMovibile+#BottoneNascondiFinestra+#BottoneChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  3446.  YPosF.w=(AltezzaFonte+3)*2
  3447.  YLunF.w=AltezzaFonte+3+16+8+8+2
  3448.  If TipoDiEventoMusicaleDiBase$<>"Program"
  3449.   If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3450.    If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3451.     YLunF+8+8
  3452.    EndIf
  3453.   EndIf
  3454.  EndIf
  3455.  If TipoDiEventoMusicaleDiBase$="PitchBend" Then YLunF+8+8
  3456.  TitoloFinestra$="Basic event: "+LCase$(TipoDiEventoMusicaleDiBase$)
  3457.  Window #FinestraCambioEventoBase,4,YPosF,4+24*10+4,YLunF,TipoFinestra,TitoloFinestra$,-1,-1
  3458.  LarghezzaInternaFinestraCambioEventoBase.w=InnerWidth
  3459.  AltezzaInternaFinestraCambioEventoBase.w=InnerHeight
  3460.  CloseWindow #FinestraCambioEventoBase
  3461.  XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  3462.  YLunSlider=8
  3463.  If TipoDiEventoMusicaleDiBase$<>"Program"
  3464.   If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3465.    If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3466.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  3467.      ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3468.      ImpostaSlider{2,0,AltezzaInternaFinestraCambioEventoBase-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3469.      ImpostaSlider{3,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3470.     Else
  3471.      ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8-8-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3472.      ImpostaSlider{2,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3473.     EndIf
  3474.    Else
  3475.     ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3476.    EndIf
  3477.   EndIf
  3478.  Else
  3479.   ImpostaSlider{1,0,AltezzaInternaFinestraCambioEventoBase-8,"HORIZONTAL",0,#ListaGadgetCambioEventoBase}
  3480.  EndIf
  3481.  Window #FinestraCambioEventoBase,4,YPosF,4+24*10+4,YLunF,TipoFinestra,TitoloFinestra$,-1,-1,#ListaGadgetCambioEventoBase
  3482.  WindowFont #FonteDiCaratteriTopaz8
  3483. ; Zona.b=NewZoneTable(#TabellaZoneCambioEventoBase,9)
  3484. ; If Zona=True Then UseZoneTable #TabellaZoneCambioEventoBase Else Statement Return
  3485. ; UseZoneTable #TabellaZoneEditoreSequenza
  3486.  For Zona.b=0 To 6
  3487.   WBlit Zona,24*Zona,0;:SetZone Zona,24*Zona,0,24*Zona+23,15
  3488.  Next
  3489.  WBlit 7,24*7+9,0;:SetZone 7,24*7,0,24*8+23,15
  3490.  WLocate 24*8+8,4:WColour 1,0:Print "3";:SetZone 8,24*8,0,24*8+23,15
  3491.  WLocate 24*9+8,4:WColour 1,0:Print "5";:SetZone 9,24*9,0,24*9+23,15
  3492.  MostraSlider{1,(LarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3493.  If TipoDiEventoMusicaleDiBase$<>"Program"
  3494.   If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3495.    If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3496.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  3497. ;------------------------------------------------------------------------------
  3498. ;questa variabile contiene il valore finale di base dello spostamento di picco
  3499. ; delle note
  3500. ;this variable retains the basic pitch bend final value
  3501. ;-------------------------------------------------------
  3502.      FineCurvaDiPiccoEventoBase.w=#_PitchBendCenter
  3503.  
  3504. ;--------------------------------------------------------------------------------
  3505. ;questa variabile contiene il valore iniziale di base dello spostamento di picco
  3506. ; delle note
  3507. ;this variable retains the basic pitch bend initial value
  3508. ;---------------------------------------------------------
  3509.      InizioCurvaDiPiccoEventoBase.w=#_PitchBendCenter
  3510.  
  3511.      ValoreMassimo.w=16384
  3512.      Valore.w=InizioCurvaDiPiccoEventoBase
  3513.      MostraSlider{2,Valore,ValoreMassimo,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3514.      Valore.w=FineCurvaDiPiccoEventoBase
  3515.      MostraSlider{3,Valore,ValoreMassimo,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3516.     Else
  3517.      MostraSlider{2,ValoreEventoBase,127,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3518.     EndIf
  3519.    EndIf
  3520.   EndIf
  3521.  EndIf
  3522.  NuovaLarghezzaEventoBase.w=LarghezzaEventoBase
  3523.  NuovoValoreEventoBase.w=ValoreEventoBase
  3524.  NuovoInizioCurvaDiPiccoEventoBase.w=InizioCurvaDiPiccoEventoBase
  3525.  NuovaFineCurvaDiPiccoEventoBase.w=FineCurvaDiPiccoEventoBase
  3526.  EventoBaseModificato.b=False
  3527.  Repeat
  3528.   If SecondoClicDelTopo.b=False
  3529.    If TipoDiEventoMusicaleDiBase$<>"Program"
  3530.     If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3531.      If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3532.       If TipoDiEventoMusicaleDiBase$="PitchBend"
  3533.        WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8-8-8
  3534.       Else
  3535.        WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8-8-8
  3536.       EndIf
  3537.      Else
  3538.       WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8
  3539.      EndIf
  3540.     EndIf
  3541.    Else
  3542.     WLocate 0,AltezzaInternaFinestraCambioEventoBase-8-8
  3543.    EndIf
  3544.    If NuovaLarghezzaEventoBase MOD 6=0
  3545.     If ColoriOriginali=True Then WColour 3,2 Else WColour 10,9
  3546.    Else
  3547.     WColour 2,1
  3548.    EndIf
  3549.    Format "0000":Print NuovaLarghezzaEventoBase:Format "":Print SPACE$(21)+"width"
  3550.    If TipoDiEventoMusicaleDiBase$<>"Program"
  3551.     If TipoDiEventoMusicaleDiBase$<>"PolyAftertouch" AND TipoDiEventoMusicaleDiBase$<>"MonoAftertouch"
  3552.      If TipoDiEventoMusicaleDiBase$<>"Tempo" AND TipoDiEventoMusicaleDiBase$<>"BPM"
  3553.       If TipoDiEventoMusicaleDiBase$="PitchBend"
  3554.        Y.w=AltezzaInternaFinestraCambioEventoBase-8-8-8-8
  3555.        WLocate 0,Y:WColour 1,0:Format "+0000"
  3556.        Print NuovoInizioCurvaDiPiccoEventoBase-#_PitchBendCenter:Format ""
  3557.        Valore$="initial"
  3558.       Else
  3559.        Y=AltezzaInternaFinestraCambioEventoBase-8-8
  3560.        WLocate 0,Y:WColour 1,0:Format "000":Print NuovoValoreEventoBase:Format ""
  3561.        If TipoDiEventoMusicaleDiBase$="Note" Then Valore$="velocity"
  3562.        If TipoDiEventoMusicaleDiBase$="Control" Then Valore$="value"
  3563.       EndIf
  3564.       WLocate (30-Len(Valore$))*8,Y:Print Valore$
  3565.      EndIf
  3566.     EndIf
  3567.    EndIf
  3568.    If TipoDiEventoMusicaleDiBase$="PitchBend"
  3569.     Y=AltezzaInternaFinestraCambioEventoBase-8-8
  3570.     WLocate 0,Y:WColour 1,0:Format "+0000"
  3571.     Print NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter:Format ""
  3572.     Valore$="final":WLocate (30-Len(Valore$))*8,Y:Print Valore$
  3573.    EndIf
  3574.    SecondoClicDelTopo=True
  3575.   EndIf
  3576.   Repeat
  3577.    If ParlatoAttivato=True AND Parlato$<>"" AND Timer-TempoTrascorso.l>49 Then Speak Parlato$:Parlato$=""
  3578.  
  3579.    EventoFinestraCambioEventoBase.l=Event
  3580.  
  3581.   Until EventoFinestraCambioEventoBase>0
  3582.  
  3583.   Select EventoFinestraCambioEventoBase
  3584.   Case #HaiPremutoUnTastoDelTopo
  3585.    XTopo=WMouseX:YTopo=WMouseY:TastoDelTopoCliccato.b=MButtons
  3586.    Select TastoDelTopoCliccato
  3587.    Case #TastoSinistroDelTopoPremuto
  3588.     XZonaTopo.b=XTopo/24+1:YZonaTopo.b=YTopo>=0 AND YTopo<16
  3589.     If YZonaTopo=True
  3590.      Select XZonaTopo
  3591.      Case 1
  3592.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto*4:NotaPuntata.w=0:Terzina.b=0:Cinquina.b=0
  3593.       Parlato$="You have choosen a whole note width"
  3594.      Case 2
  3595.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto*2:NotaPuntata=0:Terzina=0:Cinquina=0
  3596.       Parlato$="You have choosen a half note width"
  3597.      Case 3
  3598.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto:NotaPuntata=0:Terzina=0:Cinquina=0
  3599.       Parlato$="You have choosen a quarter note width"
  3600.      Case 4
  3601.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto/2:NotaPuntata=0:Terzina=0:Cinquina=0
  3602.       Parlato$="You have choosen an eighth note width"
  3603.      Case 5
  3604.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto/4:NotaPuntata=0:Terzina=0:Cinquina=0
  3605.       Parlato$="You have choosen a sixteenth note width"
  3606.      Case 6
  3607.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto/8:NotaPuntata=0:Terzina=0:Cinquina=0
  3608.       Parlato$="You have choosen a thirty second note width"
  3609.      Case 7
  3610.       NuovaLarghezzaEventoBase=#TicDiBasePerQuarto/16:NotaPuntata=0:Terzina=0:Cinquina=0
  3611.       Parlato$="You have choosen a sixty fourth note width"
  3612.      Case 8
  3613.       If NotaPuntata=0
  3614.        If Terzina>0
  3615.         NuovaLarghezzaEventoBase*Terzina
  3616.         Parlato$="You have no more a triplet note width,"
  3617.         Terzina=0
  3618.        EndIf
  3619.        If Cinquina>0
  3620.         NuovaLarghezzaEventoBase*Cinquina
  3621.         Parlato$="You have no more a quintet note width,"
  3622.         Cinquina=0
  3623.        EndIf
  3624.        NotaPuntata=NuovaLarghezzaEventoBase/2
  3625.        If NuovaLarghezzaEventoBase+NotaPuntata<=192*6
  3626.         NuovaLarghezzaEventoBase+NotaPuntata
  3627.         Parlato$+" you have choosen a dotted note width."
  3628.        Else
  3629.         NotaPuntata=0:XZonaTopo=0
  3630.        EndIf
  3631.       Else
  3632.        NuovaLarghezzaEventoBase/3*2
  3633.        NotaPuntata=0
  3634.        Parlato$="You have no more a dotted note width"
  3635.       EndIf
  3636.      Case 9
  3637.       If Terzina=0 AND NuovaLarghezzaEventoBase>5
  3638.        If NotaPuntata>0
  3639.         NuovaLarghezzaEventoBase/3*2
  3640.         Parlato$="You have no more a dotted note width,"
  3641.         NotaPuntata=0
  3642.        EndIf
  3643.        If Cinquina>0
  3644.         NuovaLarghezzaEventoBase*Cinquina
  3645.         Parlato$="You have no more a quintet note width,"
  3646.         Cinquina=0
  3647.        EndIf
  3648.        Terzina=3:NuovaLarghezzaEventoBase/Terzina
  3649.        Parlato$+" you have choosen a triplet note width."
  3650.       Else
  3651.        NuovaLarghezzaEventoBase*Terzina
  3652.        Parlato$="You have no more a triplet note width."
  3653.        Terzina=0
  3654.       EndIf
  3655.      Case 10
  3656.       If Cinquina=0 AND NuovaLarghezzaEventoBase>9
  3657.        If NotaPuntata>0
  3658.         NuovaLarghezzaEventoBase/3*2
  3659.         Parlato$="You have no more a dotted note width,"
  3660.         NotaPuntata=0
  3661.        EndIf
  3662.        If Terzina>0
  3663.         NuovaLarghezzaEventoBase*Terzina
  3664.         Parlato$="You have no more a triplet note width,"
  3665.         Terzina=0
  3666.        EndIf
  3667.        Cinquina=5:NuovaLarghezzaEventoBase/Cinquina
  3668.        Parlato$+" you have choosen a quintet note width."
  3669.       Else
  3670.        NuovaLarghezzaEventoBase*Cinquina
  3671.        Parlato$="You have no more a quintet note width."
  3672.        Cinquina=0
  3673.       EndIf
  3674.      End Select
  3675.      If XZonaTopo>0 AND XZonaTopo<11
  3676. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3677.       Parlato$+", that are "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3678.      EndIf
  3679.     EndIf
  3680.     SecondoClicDelTopo=False
  3681.     TempoTrascorso=Timer
  3682.    Case #TastoSinistroDelTopoRilasciato
  3683.     SecondoClicDelTopo=True
  3684.    End Select
  3685. ;  Case #HaiPremutoUnBottone
  3686. ;   XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  3687. ;   Select GadgetHit
  3688. ;   Case 1
  3689. ;    NuovaLarghezzaEventoBase=ValoreSlider{1,(192*6-2)/2,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}*2+2
  3690. ;    NotaPuntata=0:Terzina=0
  3691. ;    Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3692. ;   Case 2
  3693. ;    If TipoDiEventoMusicaleDiBase$="PitchBend"
  3694. ;     NuovoInizioCurvaDiPiccoEventoBase=ValoreSlider{2,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3695. ;    Else
  3696. ;     NuovoValoreEventoBase=ValoreSlider{2,127,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3697. ;    EndIf
  3698. ;    If TipoDiEventoMusicaleDiBase$="Note" Then Parlato$="You have choosen a note velocity of "+Str$(NuovoValoreEventoBase)+"."
  3699. ;    If TipoDiEventoMusicaleDiBase$="Control" Then Parlato$="You have choosen a value of "+Str$(NuovoValoreEventoBase)+"."
  3700. ;    If TipoDiEventoMusicaleDiBase$="PitchBend"
  3701. ;    Parlato$="You have choosen a bend inital value of "+Str$(NuovoInizioCurvaDiPiccoEventoBase-#_pitchBendCenter)+"."
  3702. ;    EndIf
  3703. ;   Case 3
  3704. ;    NuovaFineCurvaDiPiccoEventoBase=ValoreSlider{3,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3705. ;    Parlato$="You have choosen a bend final value of "+Str$(NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3706. ;   End Select
  3707. ;   SecondoClicDelTopo=False
  3708. ;   TempoTrascorso=Timer
  3709.   Case #HaiRilasciatoUnBottone
  3710.    XLunSlider=LarghezzaInternaFinestraCambioEventoBase
  3711.    Select GadgetHit
  3712.    Case 1
  3713.     NuovaLarghezzaEventoBase=ValoreSlider{1,(192*6-2)/2,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}*2+2
  3714.     NotaPuntata=0:Terzina=0:Cinquina=0
  3715.     Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3716.    Case 2
  3717.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  3718.      NuovoInizioCurvaDiPiccoEventoBase=ValoreSlider{2,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3719.     Else
  3720.      NuovoValoreEventoBase=ValoreSlider{2,127,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3721.     EndIf
  3722.     If TipoDiEventoMusicaleDiBase$="Note" Then Parlato$="You have choosen a note velocity of "+Str$(NuovoValoreEventoBase)+"."
  3723.     If TipoDiEventoMusicaleDiBase$="Control" Then Parlato$="You have choosen a value of "+Str$(NuovoValoreEventoBase)+"."
  3724.     If TipoDiEventoMusicaleDiBase$="PitchBend"
  3725.      Parlato$="You have choosen a bend initial value of "+Str$(NuovoInizioCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3726.     EndIf
  3727.    Case 3
  3728.     NuovaFineCurvaDiPiccoEventoBase=ValoreSlider{3,16384,XLunSlider,"HORIZONTAL",#ListaGadgetCambioEventoBase}
  3729.     Parlato$="You have choosen a bend final value of "+Str$(NuovaFineCurvaDiPiccoEventoBase-#_PitchBendCenter)+"."
  3730.    End Select
  3731.    TempoTrascorso=Timer
  3732.    SecondoClicDelTopo=False
  3733.   Case #HaiChiusoLaFinestra
  3734.    EsciDalCambioEventoBase=True
  3735.   Case #HaiPremutoUnTasto
  3736.    TastoPremuto$=LCase$(Inkey$)
  3737.    Select TastoPremuto$
  3738.    Case TastoFuga$
  3739.     EsciDalCambioEventoBase=True
  3740.    Case TastoCursoreDestra$
  3741.     If NuovaLarghezzaEventoBase<#TicDiBasePerQuarto*6-2
  3742.      NuovaLarghezzaEventoBase+2:NotaPuntata=0:Terzina=0:Cinquina=0
  3743. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3744.      Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3745.     EndIf
  3746.    Case TastoCursoreSinistra$
  3747.     If NuovaLarghezzaEventoBase>3
  3748.      NuovaLarghezzaEventoBase-2:NotaPuntata=0:Terzina=0:Cinquina=0
  3749. MostraSlider{1,(NuovaLarghezzaEventoBase-2)/2,(192*6-2)/2,"HORIZONTAL",#ListaGadgetCambioEventoBase,#FinestraCambioEventoBase}
  3750.      Parlato$="You have choosen a note width of "+Str$(NuovaLarghezzaEventoBase)+" ticks."
  3751.     EndIf
  3752.    End Select
  3753.    TempoTrascorso=Timer
  3754.    SecondoClicDelTopo=False
  3755.   End Select
  3756.   FlushEvents
  3757.  Until EsciDalCambioEventoBase=True
  3758.  If NuovaLarghezzaEventoBase<>LarghezzaEventoBase Then EventoBaseModificato=True
  3759.  If NuovoValoreEventoBase<>ValoreEventoBase Then EventoBaseModificato=True
  3760.  LarghezzaEventoBase=NuovaLarghezzaEventoBase
  3761.  ValoreEventoBase=NuovoValoreEventoBase
  3762.  If EventiMusicaliSelezionati>0
  3763.   If EventoBaseModificato=True
  3764.    Messaggio$="You have made changes:"
  3765.   Else
  3766.    Messaggio$="You have made no changes:"
  3767.   EndIf
  3768.   Messaggio$+"|Would you apply the current|settings to the selected events?"
  3769.   ApplicaINuoviValoriAgliEventiMusicaliSelezionati.b=EZRequest("AmySequencer message",Messaggio$,"Yes|No")
  3770.   If ApplicaINuoviValoriAgliEventiMusicaliSelezionati=1
  3771.    Select TipoDiEventoMusicaleDiBase$
  3772.    Case "Note"
  3773.     AggiustaInizio.b=EZRequest("AmySequencer message","Quantize notes start?","Yes|No")
  3774.     AggiustaDurata.b=EZRequest("AmySequencer message","Quantize notes length?","Yes|No")
  3775.     AggiustaValore.b=EZRequest("AmySequencer message","Change notes velocity?","Yes|No")
  3776.    Case "Program"
  3777.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3778.    Case "Control"
  3779.     AggiustaInizio=EZRequest("AmySequencer message","Quantize controls start?","Yes|No")
  3780.     AggiustaValore=EZRequest("AmySequencer message","Change controls value?","Yes|No")
  3781.    Case "PolyAftertouch"
  3782.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3783.    Case "MonoAftertouch"
  3784.     AggiustaInizio=EZRequest("AmySequencer message","Quantize programs start?","Yes|No")
  3785.    Case "PitchBend"
  3786.     AggiustaInizio=EZRequest("AmySequencer message","Quantize pitch bends start?","Yes|No")
  3787.    Case "Tempo"
  3788.     AggiustaInizio=EZRequest("AmySequencer message","Quantize tempo events start?","Yes|No")
  3789.    Case "BPM"
  3790.     AggiustaInizio=EZRequest("AmySequencer message","Quantize BPM events start?","Yes|No")
  3791.    End Select
  3792.    ResetList EventoMusicale()
  3793.    While NextItem(EventoMusicale())=True
  3794.     StatoEventoMusicale.b=EventoMusicale()\Stato
  3795.     SelezioneEventoMusicale.b=StatoEventoMusicale & #EventoMusicaleSelezionato
  3796.     If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  3797.      Select EventoMusicale()\Tipo
  3798.      Case "Note"
  3799.       If AggiustaValore=1 Then EventoMusicale()\Valore=ValoreEventoBase
  3800.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3801.       If AggiustaDurata=1 Then EventoMusicale()\Durata/LarghezzaEventoBase*LarghezzaEventoBase
  3802.      Case "Program"
  3803.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3804.      Case "PolyAftertouch"
  3805.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3806.      Case "MonoAftertouch"
  3807.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3808.      Case "Control"
  3809.       If AggiustaValore=1 Then EventoMusicale()\Valore=ValoreEventoBase
  3810.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3811.      Case "PitchBend"
  3812.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3813.      Case "Tempo"
  3814.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3815.      Case "BPM"
  3816.       If AggiustaInizio=1 Then EventoMusicale()\Inizio/LarghezzaEventoBase*LarghezzaEventoBase
  3817.      End Select
  3818.     EndIf
  3819.    Wend
  3820.   EndIf
  3821.  EndIf
  3822.  If NuovoInizioCurvaDiPiccoEventoBase<>InizioCurvaDiPiccoEventoBase Then Progressione.b=True
  3823.  If NuovaFineCurvaDiPiccoEventoBase<>FineCurvaDiPiccoEventoBase Then Progressione=True
  3824.  If Progressione=True
  3825.   ProgressioneEventiMusicaliCurvaDiPicco{NuovoInizioCurvaDiPiccoEventoBase,NuovaFineCurvaDiPiccoEventoBase}
  3826.   InizioCurvaDiPiccoEventoBase=NuovoInizioCurvaDiPiccoEventoBase
  3827.   FineCurvaDiPiccoEventoBase=NuovaFineCurvaDiPiccoEventoBase
  3828.  EndIf
  3829.  
  3830. ;*************************************************************
  3831. ;la seguente linea se attivata da' errore quando non dovrebbe
  3832. ;the following line if avtivated gives an error when it should not do
  3833. ;*********************************************************************
  3834. ; FreeZoneTable(#TabellaZoneCambioEventoBase)
  3835.  
  3836.  CloseWindow #FinestraCambioEventoBase
  3837.  Use Window #FinestraEditoreSequenza
  3838.  
  3839. ;***************************************************
  3840. ;il seguente comando sembra non avere alcun effetto
  3841. ;the following command seems have no effect
  3842. ;*******************************************
  3843. ; UseZoneTable #TabellaZoneEditoreSequenza
  3844.  
  3845. End Statement
  3846.  
  3847. ;---------------------------------------------------------------
  3848. ;this procedure states the selected by mouse event new position
  3849. ;questa procedura mostra la nuova posizione dell'evento selezionato col mouse
  3850. ;-----------------------------------------------------------------------------
  3851. Statement MostraNuovaPosizioneEvento{XEvento.l,YEvento.b}
  3852. SHARED AltezzaInternaFinestraEditoreSequenza
  3853. SHARED AreaVisibileDeiValori
  3854. SHARED EventoMusicale()
  3855. SHARED LarghezzaEventoBase
  3856. SHARED LarghezzaInternaFinestraEditoreSequenza
  3857. SHARED MostraNuovoValore
  3858. SHARED ScalaEventiMusicali
  3859. SHARED TipoDiEventoMusicaleDiBase$
  3860. SHARED XInizioAreaVisibile
  3861. SHARED YInizioAreaVisibile
  3862.  X0.w=16+(XEvento-XInizioAreaVisibile)/ScalaEventiMusicali
  3863.  Select TipoDiEventoMusicaleDiBase$
  3864.  Case "Note"
  3865.   Y0.w=(127-YInizioAreaVisibile-YEvento)*8
  3866.   X1.w=X0+(LarghezzaEventoBase-1)/ScalaEventiMusicali
  3867.  Case "Program"
  3868.   Y0=(AreaVisibileDeiValori-1)*1.0*(127-YEvento)/127
  3869.   X1=X0+Len("Program000X")*8-1
  3870.  Case "Control"
  3871.   Y0=(AreaVisibileDeiValori-1)*1.0*(127-YEvento)/127
  3872.   X1=X0+Len("Control000X")*8-1
  3873.  Case "PolyAftertouch"
  3874.   Y0=(AreaVisibileDeiValori-1)*1.0*(127-YEvento)/127
  3875.   X1=X0+Len("Poly000X")*8-1
  3876.  Case "MonoAftertouch"
  3877.   Y0=(AreaVisibileDeiValori-1)*1.0*(127-YEvento)/127
  3878.   X1=X0+Len("Mono000X")*8-1
  3879.  Case "PitchBend"
  3880.   Y0=(AreaVisibileDeiValori-1)*1.0*(127-YEvento)/127
  3881.   X1=X0+Len("Bend+0000X")*8-1
  3882.  Case "Tempo"
  3883.   Y0=(AreaVisibileDeiValori-1)*1.0*(127-YEvento)/127
  3884.   X1=X0+Len("Tempo00/000X")*8-1
  3885.  Case "BPM"
  3886.   Y0=(AreaVisibileDeiValori-1)*1.0*(97-YEvento)/97
  3887.   X1=X0+Len("BPM000X")*8-1
  3888.  End Select
  3889.  Y1.w=Y0+7
  3890.  X0=Min(Max(X0,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3891.  Y0=Min(Max(Y0,0),AltezzaInternaFinestraEditoreSequenza-1-8-8-7)
  3892.  X1=Min(Max(X1,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3893.  Y1=Min(Max(Y1,7),AltezzaInternaFinestraEditoreSequenza-1-8-8)
  3894.  WJam #SecondaVoltaStessoColore
  3895.  If MostraNuovoValore=True
  3896.   WLocate X0,Y0
  3897.   Select TipoDiEventoMusicaleDiBase$
  3898.   Case "Note"
  3899.    Wline X0,Y0,X1,Y0,X1,Y1,X0,Y1,X0,Y0,0
  3900.   Case "Program"
  3901.    Format "000":Print "Program",Str$(YEvento),"X":Format ""
  3902.   Case "Control"
  3903.    Format "000":Print "Control",Str$(YEvento),"X":Format ""
  3904.   Case "PolyAftertouch"
  3905.    Format "000":Print "Poly",Str$(YEvento),"X":Format ""
  3906.   Case "MonoAftertouch"
  3907.    Format "000":Print "Mono",Str$(YEvento),"X":Format ""
  3908.   Case "PitchBend"
  3909.    Format "+0000":Print "Bend",Str$(YEvento*128+EventoMusicale()\Valore-#_PitchBendCenter),"X":Format ""
  3910.   Case "Tempo"
  3911.    Format "00":Tempo$="Tempo"+Str$(YEvento MOD 16+1)
  3912.    Format "000":Tempo$+"/"+Str$(2^(YEvento/16)):Format ""
  3913.   Case "BPM"
  3914.    Format "000":Print "BPM",Str$(9+YEvento*3+EventoMusicale()\Valore),"X":Format ""
  3915.   End Select
  3916.  Else
  3917.   Wline X0,Y0,X1,Y0,X1,Y1,X0,Y1,X0,Y0,0
  3918.  EndIf
  3919.  WJam #DueColoriConSfondoPieno
  3920. End Statement
  3921.  
  3922. ;------------------------------------------------------------------------------
  3923. ;questa procedura permette di spostare gli eventi selezionati cliccando con il
  3924. ; mouse su uno di essi
  3925. ;this procedure permits to move the selected events clicking on one of these
  3926. ;----------------------------------------------------------------------------
  3927. Statement MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneEvento.l,YPosizioneEvento.b}
  3928. SHARED AltezzaInternaFinestraEditoreSequenza
  3929. SHARED AreaVisibileDeiValori
  3930. SHARED CanaleSelezionato
  3931. SHARED DurataSequenza
  3932. SHARED EventoMusicale()
  3933. SHARED EventoMusicaleSpostatoConIlTopo
  3934. SHARED LarghezzaEventoBase
  3935. SHARED LarghezzaInternaFinestraEditoreSequenza
  3936. SHARED MostraNuovoValore
  3937. SHARED ScalaEventiMusicali
  3938. SHARED SequenzaSelezionata
  3939. SHARED XInizioAreaVisibile
  3940. SHARED YInizioAreaVisibile
  3941. SHARED YPosizioneNota
  3942.  XPosizioneEvento/LarghezzaEventoBase*LarghezzaEventoBase
  3943.  Repeat
  3944.   NuovaXTopo.w=WMouseX:NuovaYTopo.w=WMouseY:TastoPremutoDelTopo.b=Joyb(0)
  3945.   NuovaXTopo=Min(Max(NuovaXTopo,16),LarghezzaInternaFinestraEditoreSequenza-1)
  3946.   NuovaYTopo=Min(Max(NuovaYTopo,0),AreaVisibileDeiValori-1)
  3947.   TipoDiEventoMusicale$=EventoMusicale()\Tipo
  3948.   CanaleEvento.b=EventoMusicale()\Canale
  3949.   Select TipoDiEventoMusicale$
  3950.   Case "Note"
  3951.    XNuovaPosizioneNota.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3952.    XNuovaPosizioneNota/LarghezzaEventoBase*LarghezzaEventoBase
  3953.    If XNuovaPosizioneNota<>XPosizioneEvento
  3954.     IncrementoXEventoMusicale.l=XNuovaPosizioneNota-XPosizioneEvento
  3955.     EventoMusicaleSpostatoConIlTopo=True
  3956.    Else
  3957.     IncrementoXEventoMusicale=0
  3958.    EndIf
  3959.    YNuovaPosizioneNota.b=127-YInizioAreaVisibile-NuovaYTopo/8
  3960.    If YNuovaPosizioneNota<>YPosizioneEvento
  3961.     IncrementoYEventoMusicale.b=YNuovaPosizioneNota-YPosizioneEvento
  3962.     EventoMusicaleSpostatoConIlTopo=True
  3963.    Else
  3964.     IncrementoYEventoMusicale=0
  3965.    EndIf
  3966.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3967.     EventoMusicaleSpostatoConIlTopo=False
  3968.    Else
  3969.     Messaggio$="Note>"+Str$(IncrementoYEventoMusicale)
  3970.    EndIf
  3971.   Case "Program"
  3972.    XNuovaPosizioneProgramma.l=XInizioAreaVisbile+(NuovaXTopo-16)*ScalaEventiMusicali
  3973.    XNuovaPosizioneProgramma/LarghezzaEventoBase*LarghezzaEventoBase
  3974.    If XNuovaPosizioneProgramma<>XPosizioneEvento
  3975.     IncrementoXEventoMusicale=XNuovaPosizioneProgramma-XPosizioneEvento
  3976.     EventoMusicaleSpostatoConIlTopo=True
  3977.    Else
  3978.     IncrementoXEventoMusicale=0
  3979.    EndIf
  3980.    YNuovaPosizioneProgramma.b=127-NuovaYTopo*1.0*127/(AreaVisibileDeiValori-1)
  3981.    If YNuovaPosizioneProgramma<0
  3982.     If NuovaYTopo<0 Then YNuovaPosizioneProgramma=127
  3983.     If NuovaYTopo>(AreaVisibileDeiValori-1) Then YNuovaPosizioneProgramma=0
  3984.    EndIf
  3985.    If YNuovaPosizioneProgramma<>YPosizioneEvento
  3986.     IncrementoYEventoMusicale=YNuovaPosizioneProgramma-YPosizioneEvento
  3987.     EventoMusicaleSpostatoConIlTopo=True
  3988.    Else
  3989.     IncrementoYEventoMusicale=0
  3990.    EndIf
  3991.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  3992.     EventoMusicaleSpostatoConIlTopo=False
  3993.    Else
  3994.     Messaggio$="Program>"+Str$(IncrementoYEventoMusicale)
  3995.    EndIf
  3996.   Case "Control"
  3997.    XNuovaPosizioneControllo.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  3998.    XNuovaPosizioneControllo/LarghezzaEventoBase*LarghezzaEventoBase
  3999.    If XNuovaPosizioneControllo<>XPosizioneEvento
  4000.     IncrementoXEventoMusicale=XNuovaPosizioneControllo-XPosizioneEvento
  4001.     EventoMusicaleSpostatoConIlTopo=True
  4002.    Else
  4003.     IncrementoXEventoMusicale=0
  4004.    EndIf
  4005.    YNuovaPosizioneControllo.b=127-NuovaYTopo*1.0*127/(AreaVisibileDeiValori-1)
  4006.    If YNuovaPosizioneControllo<0
  4007.     If NuovaYTopo<0 Then YNuovaPosizioneControllo=127
  4008.     If NuovaYTopo>(AreaVisibileDeiValori-1) Then YNuovaPosizioneControllo=0
  4009.    EndIf
  4010.    If YNuovaPosizioneControllo<>YPosizioneEvento
  4011.     IncrementoYEventoMusicale=YNuovaPosizioneControllo-YPosizioneEvento
  4012.     EventoMusicaleSpostatoConIlTopo=True
  4013.    Else
  4014.     IncrementoYEventoMusicale=0
  4015.    EndIf
  4016.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  4017.     EventoMusicaleSpostatoConIlTopo=False
  4018.    Else
  4019.     Messaggio$="Control>"+Str$(IncrementoYEventoMusicale)
  4020.    EndIf
  4021.   Case "PolyAftertouch"
  4022.    XNuovaPosizionePressioneMultipla.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  4023.    XNuovaPosizionePressioneMultipla/LarghezzaEventoBase*LarghezzaEventoBase
  4024.    If XNuovaPosizionePressioneMultipla<>XPosizioneEvento
  4025.     IncrementoXEventoMusicale=XNuovaPosizionePressioneMultipla-XPosizioneEvento
  4026.     EventoMusicaleSpostatoConIlTopo=True
  4027.    Else
  4028.     IncrementoXEventoMusicale=0
  4029.    EndIf
  4030.    YNuovaPosizionePressioneMultipla.b=127-NuovaYTopo*1.0*127/(AreaVisibileDeiValori-1)
  4031.    If YNuovaPosizionePressioneMultipla<0
  4032.     If NuovaYTopo<0 Then YNuovaPosizionePressioneMultipla=127
  4033.     If NuovaYTopo>(AreaVisibileDeiValori-1) Then YNuovaPosizionePressioneMultipla=0
  4034.    EndIf
  4035.    If YNuovaPosizionePressioneMultipla<>YPosizioneEvento
  4036.     IncrementoYEventoMusicale=YNuovaPosizionePressioneMultipla-YPosizioneEvento
  4037.     EventoMusicaleSpostatoConIlTopo=True
  4038.    Else
  4039.     IncrementoYEventoMusicale=0
  4040.    EndIf
  4041.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  4042.     EventoMusicaleSpostatoConIlTopo=False
  4043.    Else
  4044.     Messaggio$="Poly>"+Str$(IncrementoYEventoMusicale)
  4045.    EndIf
  4046.   Case "MonoAftertouch"
  4047.    XNuovaPosizionePressioneSingola.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  4048.    XNuovaPosizionePressioneSingola/LarghezzaEventoBase*LarghezzaEventoBase
  4049.    If XNuovaPosizionePressioneSingola<>XPosizioneEvento
  4050.     IncrementoXEventoMusicale=XNuovaPosizionePressioneSingola-XPosizioneEvento
  4051.     EventoMusicaleSpostatoConIlTopo=True
  4052.    Else
  4053.     IncrementoXEventoMusicale=0
  4054.    EndIf
  4055.    YNuovaPosizionePressioneSingola.b=127-NuovaYTopo*1.0*127/(AreaVisibileDeiValori-1)
  4056.    If YNuovaPosizionePressioneSingola<0
  4057.     If NuovaYTopo<0 Then YNuovaPosizionePressioneSingola=127
  4058.     If NuovaYTopo>(AreaVisibileDeiValori-1) Then YNuovaPosizionePressioneSingola=0
  4059.    EndIf
  4060.    If YNuovaPosizionePressioneMultipla<>YPosizioneEvento
  4061.     IncrementoYEventoMusicale=YNuovaPosizionePressioneSingola-YPosizioneEvento
  4062.     EventoMusicaleSpostatoConIlTopo=True
  4063.    Else
  4064.     IncrementoYEventoMusicale=0
  4065.    EndIf
  4066.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  4067.     EventoMusicaleSpostatoConIlTopo=False
  4068.    Else
  4069.     Messaggio$="Mono>"+Str$(IncrementoYEventoMusicale)
  4070.    EndIf
  4071.   Case "PitchBend"
  4072.    XNuovaPosizioneCurvaDiPicco.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  4073.    XNuovaPosizioneCurvaDiPicco/LarghezzaEventoBase*LarghezzaEventoBase
  4074.    If XNuovaPosizioneCurvaDiPicco<>XPosizioneEvento
  4075.     IncrementoXEventoMusicale=XNuovaPosizioneCurvaDiPicco-XPosizioneEvento
  4076.     EventoMusicaleSpostatoConIlTopo=True
  4077.    Else
  4078.     IncrementoXEventoMusicale=0
  4079.    EndIf
  4080.    YNuovaPosizioneCurvaDiPicco.b=127-NuovaYTopo*1.0*127/(AreaVisibileDeiValori-1)
  4081.    If YNuovaPosizioneCurvaDiPicco<0
  4082.     If NuovaYTopo<0 Then YNuovaPosizioneCurvaDiPicco=127
  4083.     If NuovaYTopo>(AreaVisibileDeiValori-1) Then YNuovaPosizioneCurvaDiPicco=0
  4084.    EndIf
  4085.    If YNuovaPosizioneCurvaDiPicco<>YPosizioneEvento
  4086.     IncrementoYEventoMusicale=YNuovaPosizioneCurvaDiPicco-YPosizioneEvento
  4087.     EventoMusicaleSpostatoConIlTopo=True
  4088.    Else
  4089.     IncrementoYEventoMusicale=0
  4090.    EndIf
  4091.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  4092.     EventoMusicaleSpostatoConIlTopo=False
  4093.    Else
  4094.     Messaggio$="Bend>"+Str$(IncrementoYEventoMusicale*128)
  4095.    EndIf
  4096.   Case "Tempo"
  4097.    XNuovaPosizioneTempo.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  4098.    XNuovaPosizioneTempo/LarghezzaEventoBase*LarghezzaEventoBase
  4099.    If XNuovaPosizioneTempo<>XPosizioneEvento
  4100.     IncrementoXEventoMusicale=XNuovaPosizioneTempo-XPosizioneEvento
  4101.     EventoMusicaleSpostatoConIlTopo=True
  4102.    Else
  4103.     IncrementoXEventoMusicale=0
  4104.    EndIf
  4105.    YNuovaPosizioneTempo.b=127-NuovaYTopo*1.0*127/(AreaVisibileDeiValori-1)
  4106.    If YNuovaPosizioneTempo<0
  4107.     If NuovaYTopo<0 Then YNuovaPosizioneTempo=127
  4108.     If NuovaYTopo>(AreaVisibileDeiValori-1) Then YNuovaPosizioneTempo=0
  4109.    EndIf
  4110.    If YNuovaPosizioneTempo<>YPosizioneEvento
  4111.     IncrementoYEventoMusicale=YNuovaPosizioneTempo-YPosizioneEvento
  4112.     EventoMusicaleSpostatoConIlTopo=True
  4113.    Else
  4114.     IncrementoYEventoMusicale=0
  4115.    EndIf
  4116.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  4117.     EventoMusicaleSpostatoConIlTopo=False
  4118.    Else
  4119.     NuoviBattiti.b=IncrementoYEventoMusicale MOD 16+1
  4120.     NuoveMisure.w=2^Abs(IncrementoYEventoMusicale/16)
  4121.     Messaggio$="Tempo>":If Sgn(IncrementoYEventoMusicale)=-1 Then Messaggio$+"-"
  4122.     Format "00":Messaggio$="Tempo"+Str$(NuoviBattiti)
  4123.     Format "000":Messaggio$+"/"+Str$(NuoveMisure)
  4124.     Format ""
  4125.    EndIf
  4126.   Case "BPM"
  4127.    XNuovaPosizioneBattutePerMinuto.l=XInizioAreaVisibile+(NuovaXTopo-16)*ScalaEventiMusicali
  4128.    XNuovaPosizioneBattutePerMinuto/LarghezzaEventoBase*LarghezzaEventoBase
  4129.    If XNuovaPosizioneBattutePerMinuto<>XPosizioneEvento
  4130.     IncrementoXEventoMusicale=XNuovaPosizioneBattutePerMinuto-XPosizioneEvento
  4131.     EventoMusicaleSpostatoConIlTopo=True
  4132.    Else
  4133.     IncrementoXEventoMusicale=0
  4134.    EndIf
  4135.    YNuovaPosizioneBattutePerMinuto.b=97-NuovaYTopo*1.0*97/(AreaVisibileDeiValori-1)
  4136.    If YNuovaPosizioneBattutePerMinuto<0
  4137.  
  4138. ;---------------------------------------------------------------------------
  4139. ;il valore massimo per le battute per minuto e' di 97*3, cioe' 291, piu' il
  4140. ; valore di partenza che e' 10, meno 1 dato che questo e' compreso, fa 300
  4141. ;the maximum value for BPM events is 97*3, that is 291, plus the start value
  4142. ; that is 10, minus 1 seen that this is included, it gives 300
  4143. ;--------------------------------------------------------------
  4144.     If NuovaYTopo<0 Then YNuovaPosizioneBattutePerMinuto=97:EventoMusicale()\Valore=0
  4145.  
  4146. ;----------------------------------------------------------------------------
  4147. ;il valore minimo per le battute per minuto e' di 10, che corrisponde a zero
  4148. ; dato che viene sommato in seguito
  4149. ;the minimum value for BPM events is 10, that correspond to zero seen that it
  4150. ; is added after
  4151. ;----------------
  4152.     If NuovaYTopo>(AreaVisibileDeiValori-1) Then YNuovaPosizioneBattutePerMinuto=0:EventoMusicale()\Valore=1
  4153.  
  4154.    EndIf
  4155.    If YNuovaPosizioneBattutePerMinuto<>YPosizioneEvento
  4156.     IncrementoYEventoMusicale=YNuovaPosizioneBattutePerMinuto-YPosizioneEvento
  4157.     EventoMusicaleSpostatoConIlTopo=True
  4158.    Else
  4159.     IncrementoYEventoMusicale=0
  4160.    EndIf
  4161.    If IncrementoXEventoMusicale=0 AND IncrementoYEventoMusicale=0
  4162.     EventoMusicaleSpostatoConIlTopo=False
  4163.    Else
  4164.     BattutePerMinuto.w=IncrementoYEventoMusicale*3
  4165.     Messaggio$="BPM>"+Str$(BattutePerMinuto)
  4166.    EndIf
  4167.   End Select
  4168.   Select TipoDiEventoMusicale$
  4169.   Case "Note"
  4170.    NuovaXEvento.l=XNuovaPosizioneNota:NuovaYEvento.b=YNuovaPosizioneNota
  4171.   Case "Program"
  4172.    NuovaXEvento=XNuovaPosizioneProgramma:NuovaYEvento=YNuovaPosizioneProgramma
  4173.   Case "Control"
  4174.    NuovaXEvento=XNuovaPosizioneControllo:NuovaYEvento=YNuovaPosizioneControllo
  4175.   Case "PolyAftertouch"
  4176.    NuovaXEvento=XNuovaPosizionePressioneMultipla:NuovaYEvento=YNuovaPosizionePressioneMultipla
  4177.   Case "MonoAftertouch"
  4178.    NuovaXEvento=XNuovaPosizionePressioneSingola:NuovaYEvento=YNuovaPosizionePressioneSingola
  4179.   Case "PitchBend"
  4180.    NuovaXEvento=XNuovaPosizioneCurvaDiPicco:NuovaYEvento=YNuovaPosizioneCurvaDiPicco
  4181.   Case "Tempo"
  4182.    NuovaXEvento=XNuovaPosizioneTempo:NuovaYEvento=YNuovaPosizioneTempo
  4183.   Case "BPM"
  4184.    NuovaXEvento=XNuovaPosizioneBattutePerMinuto:NuovaYEvento=YNuovaPosizioneBattutePerMinuto
  4185.   End Select
  4186.   MostraNuovaPosizioneEvento{NuovaXEvento,NuovaYEvento}
  4187.   If EventoMusicaleSpostatoConIlTopo=False
  4188.    Messaggio$="No change made"
  4189.   EndIf
  4190.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4191.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4192.   WLocate XMessaggio,YMessaggio
  4193.   Print SPACE$(80-XMessaggio/8)
  4194.   WLocate XMessaggio,YMessaggio
  4195.   WColour CanaleSelezionato-1,16-CanaleSelezionato
  4196.   Print Messaggio$
  4197.   If EventoMusicaleSpostatoConIlTopo=True
  4198.    Print " pos>":ConvertiIlTempoInBattute{IncrementoXEventoMusicale,1}
  4199.   EndIf
  4200.   VWait
  4201.   MostraNuovaPosizioneEvento{NuovaXEvento,NuovaYEvento}
  4202.  Until TastoPremutoDelTopo<>#TastoSinistroDelTopoPremuto
  4203.  If EventoMusicaleSpostatoConIlTopo=True
  4204.   PushItem EventoMusicale()
  4205.   ResetList EventoMusicale()
  4206.   While NextItem(EventoMusicale())=True
  4207.    If EventoMusicale()\Sequenza=SequenzaSelezionata
  4208.     StatoEventoMusicale.b=EventoMusicale()\Stato
  4209.     SelezioneEventoMusicale.b=StatoEventoMusicale & #EventoMusicaleSelezionato
  4210.     If EventoMusicale()\Tipo=TipoDiEventoMusicale$ AND SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4211.      EventoMusicale()\Evento+IncrementoYEventoMusicale
  4212.      If TipoDiEventoMusicale$="BPM"
  4213.       EventoMusicale()\Evento=Min(Max(EventoMusicale()\Evento,0),97)
  4214.       If EventoMusicale()\Evento=97 Then EventoMusicale()\Valore=0
  4215.       If EventoMusicale()\Evento=0 Then EventoMusicale()\Valore=1
  4216.      Else
  4217.       EventoMusicale()\Evento=Min(Max(EventoMusicale()\Evento,0),127)
  4218.      EndIf
  4219.      EventoMusicale()\Inizio+IncrementoXEventoMusicale
  4220.      If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  4221.      DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+Max(EventoMusicale()\Durata,LarghezzaEventoBase))
  4222.     EndIf
  4223.    EndIf
  4224.   Wend
  4225.   PopItem EventoMusicale()
  4226.  EndIf
  4227. End Statement
  4228.  
  4229. ;----------------------------------------
  4230. ;questa procedura suona la nota corrente
  4231. ;this procedure plays the current note
  4232. ;--------------------------------------
  4233. Statement SuonaLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  4234. SHARED AltezzaInternaFinestraEditoreSequenza
  4235. SHARED MIDIAttivato
  4236. SHARED NoteSuonate
  4237. SHARED PeriFreq()
  4238. SHARED Suono()
  4239. SHARED VoceSpenta
  4240. SHARED VoceUsata
  4241.  For Suono.b=0 To 31
  4242.   If Suono(Suono)\Canale=CanaleNota Then Pop For:Goto FineCicloForEsecutoreNote
  4243.  Next Suono
  4244. FineCicloForEsecutoreNote
  4245.  If Suono<32
  4246.   If Suono(Suono)\Canale>0
  4247.    Periodo.l=PeriFreq(Nota)\Periodo
  4248.    If Periodo>=#PeriodoMinimo AND Periodo<65536
  4249.     If VoceSpenta>0
  4250.      If VoceSpenta BitTst 0=True Then Voce.b=1:VoceSpenta BitClr 0:Goto SuonaCampione
  4251.      If VoceSpenta BitTst 1=True Then Voce=2:VoceSpenta BitClr 1:Goto SuonaCampione
  4252.      If VoceSpenta BitTst 2=True Then Voce=4:VoceSpenta BitClr 2:Goto SuonaCampione
  4253.      If VoceSpenta BitTst 3=True Then Voce=8:VoceSPenta BitClr 3
  4254.     EndIf
  4255. SuonaCampione
  4256.     SetPeriod Suono,Periodo:Sound Suono,Voce
  4257.     VoceUsata | Voce
  4258.     Messaggio$="Note>"+Str$(Nota)+" frequency>"+Str$(PeriFreq(Nota)\Frequenza)
  4259.     NoteSuonate+1
  4260.    EndIf
  4261.   EndIf
  4262.  Else
  4263.   If MIDIAttivato=True
  4264.    ByteDiStatoMIDI.b=#_NoteOn+(CanaleNota-1)
  4265.    WriteSerial 0,ByteDiStatoMIDI
  4266.    WriteSerial 0,Nota
  4267.    WriteSerial 0,VelocitaNota
  4268.    Messaggio$="Note>"+Str$(Nota)+" vel>"+Str$(VelocitaNota)
  4269.    NoteSuonate+1
  4270.   EndIf
  4271.  EndIf
  4272.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4273.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4274.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4275.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4276.   WLocate XMessaggio,YMessaggio
  4277.   WColour CanaleNota-1,16-CanaleNota
  4278.   Print Messaggio$
  4279.  EndIf
  4280. End Statement
  4281.  
  4282. ;-----------------------------------------------
  4283. ;questa procedura esegue il cambio di programma
  4284. ;this procedure executes the program change
  4285. ;-------------------------------------------
  4286. Statement EseguiIlCambioDiProgramma{Programma.b,CanaleProgramma.b,Modo.b}
  4287. SHARED AltezzaInternaFinestraEditoreSequenza
  4288. SHARED MIDIAttivato
  4289.  If MIDIAttivato=True
  4290.   ByteDiStatoMIDI.b=#_ProgramChange+(CanaleProgramma-1)
  4291.   WriteSerial 0,ByteDiStatoMIDI
  4292.   WriteSerial 0,Programma
  4293.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4294.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4295.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4296.    Messaggio$="Program>"+Str$(Programma)
  4297.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4298.    WLocate XMessaggio,YMessaggio
  4299.    WColour CanaleProgramma-1,16-CanaleProgramma
  4300.    Print Messaggio$
  4301.   EndIf
  4302.  EndIf
  4303. End Statement
  4304.  
  4305. ;-----------------------------------------------
  4306. ;questa procedura esegue il cambio di controllo
  4307. ;this procedure executes the control change
  4308. ;-------------------------------------------
  4309. Statement EseguiIlCambioDiControllo{Controllo.b,ValoreControllo,CanaleControllo.b,Modo.b}
  4310. SHARED AltezzaInternaFinestraEditoreSequenza
  4311. SHARED MIDIAttivato
  4312.  If MIDIAttivato=True
  4313.   ByteDiStatoMIDI.b=#_ControlChange+(CanaleControllo-1)
  4314.   WriteSerial 0,ByteDiStatoMIDI
  4315.   WriteSerial 0,Controllo
  4316.   WriteSerial 0,ValoreControllo
  4317.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4318.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4319.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4320.    Messaggio$="Control>"+Str$(Controllo)+" val>"+Str$(ValoreControllo)
  4321.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4322.    WLocate XMessaggio,YMessaggio
  4323.    WColour CanaleControllo-1,16-CanaleControllo
  4324.    Print Messaggio$
  4325.   EndIf
  4326.  EndIf
  4327. End Statement
  4328.  
  4329. ;----------------------------------------------
  4330. ;questa procedura esegue la pressione multipla
  4331. ;this procedure executes the polyphonic pressure
  4332. ;------------------------------------------------
  4333. Statement EseguiLaPressioneMultipla{PressioneMultipla.b,CanalePressioneMultipla.b,Modo.b}
  4334. SHARED AltezzaInternaFinestraEditoreSequenza
  4335. SHARED MIDIAttivato
  4336.  If MIDIAttivato=True
  4337.   ByteDiStatoMIDI.b=#_PolyphonicKeyPressure+(CanalePressioneMultipla-1)
  4338.   WriteSerial 0,ByteDiStatoMIDI
  4339.   WriteSerial 0,PressioneMultipla
  4340.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4341.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4342.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4343.    Messaggio$="Poly>"+Str$(PressioneMultipla)
  4344.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4345.    WLocate XMessaggio,YMessaggio
  4346.    WColour CanalePressioneMultipla-1,16-CanalePressioneMultipla
  4347.    Print Messaggio$
  4348.   EndIf
  4349.  EndIf
  4350. End Statement
  4351.  
  4352. ;---------------------------------------------
  4353. ;questa procedura esegue la pressione singola
  4354. ;this procedure executes the single pressure
  4355. ;--------------------------------------------
  4356. Statement EseguiLaPressioneSingola{PressioneSingola.b,CanalePressioneSingola.b,Modo.b}
  4357. SHARED AltezzaInternaFinestraEditoreSequenza
  4358. SHARED MIDIAttivato
  4359.  If MIDIAttivato=True
  4360.   ByteDiStatoMIDI.b=#_ChannelKeyPressure+(CanalePressioneSingola-1)
  4361.   WriteSerial 0,ByteDiStatoMIDI
  4362.   WriteSerial 0,PressioneMultipla
  4363.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4364.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4365.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4366.    Messaggio$="Mono>"+Str$(PressioneMultipla)
  4367.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4368.    WLocate XMessaggio,YMessaggio
  4369.    WColour CanalePressioneSingola-1,16-CanalePressioneSingola
  4370.    Print Messaggio$
  4371.   EndIf
  4372.  EndIf
  4373. End Statement
  4374.  
  4375. ;-----------------------------------------------
  4376. ;questa procedura esegue la variazione di picco
  4377. ;this procedure executes the pitch bending
  4378. ;------------------------------------------
  4379. Statement EseguiLaCurvaDiPicco{CurvaDiPicco.w,CanaleCurvaDiPicco.b,Modo.b}
  4380. SHARED AltezzaInternaFinestraEditoreSequenza
  4381. SHARED MIDIAttivato
  4382.  If MIDIAttivato=True
  4383.   ByteDiStatoMIDI.b=#_PitchBend+(CanaleCurvaDiPicco-1)
  4384.   WriteSerial 0,ByteDiStatoMIDI
  4385.   WriteSerial 0,CurvaDiPicco MOD 128
  4386.   WriteSerial 0,CurvaDiPicco/128
  4387.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4388.    XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4389.    YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4390.    Messaggio$="Bend>"+Str$(CurvaDiPicco-#_PitchBendCenter)
  4391.    Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4392.    WLocate XMessaggio,YMessaggio
  4393.    WColour CanaleCurvaDiPicco-1,16-CanaleCurvaDiPicco
  4394.    Print Messaggio$
  4395.   EndIf
  4396.  EndIf
  4397. End Statement
  4398.  
  4399. ;-----------------------------------------------------
  4400. ;questa procedura interrompe la nota suonata corrente
  4401. ;this procedure stops the current played note
  4402. ;---------------------------------------------
  4403. Statement SmettiDiSuonareLaNota{Nota.b,VelocitaNota.b,CanaleNota.b,Modo.b}
  4404. SHARED AltezzaInternaFinestraEditoreSequenza
  4405. SHARED MIDIAttivato
  4406. SHARED NoteSuonate
  4407. SHARED PeriFreq()
  4408. SHARED Suono()
  4409. SHARED VoceSpenta
  4410. SHARED VoceUsata
  4411.  For Suono.b=0 To 31
  4412.   If Suono(Suono)\Canale=CanaleNota Then Pop For:Goto FineCicloForTerminatoreNote
  4413.  Next Suono
  4414. FineCicloForTerminatoreNote
  4415.  If Suono<32
  4416.   If Suono(Suono)\Canale>0
  4417.    If VoceUsata>0
  4418.     If VoceUsata BitTst 0=True Then Voce.b=1:Goto FermaCampione
  4419.     If VoceUsata BitTst 1=True Then Voce=2:Goto FermaCampione
  4420.     If VoceUsata BitTst 2=True Then Voce=4:Goto FermaCampione
  4421.     If VoceUsata BitTst 3=True Then Voce=8
  4422. FermaCampione
  4423.     Quiet Voce
  4424.     VoceSpenta | Voce
  4425.     Messaggio$="Note>"+Str$(Nota)+" frequency>"+Str$(PeriFreq(Nota)\Frequenza)
  4426.     NoteSuonate-1
  4427.    EndIf
  4428.   EndIf
  4429.  Else
  4430.   If MIDIAttivato=True
  4431.    ByteDiStatoMIDI=#_NoteOff+(CanaleNota-1)
  4432.    WriteSerial 0,ByteDiStatoMIDI
  4433.    WriteSerial 0,Nota
  4434.    WriteSerial 0,VelocitaNota
  4435.    Messaggio$="Note>"+Str$(Nota)+" vel>"+Str$(VelocitaNota)
  4436.    NoteSuonate-1
  4437.   EndIf
  4438.  EndIf
  4439.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4440.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4441.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4442.   Messaggio$+" stopped"
  4443.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4444.   WLocate XMessaggio,YMessaggio
  4445.   WColour CanaleNota-1,16-CanaleNota
  4446.   Print Messaggio$
  4447.  EndIf
  4448. End Statement
  4449.  
  4450. ;---------------------------------------------------------
  4451. ;questa procedura mostra gli slider dell'editore sequenza
  4452. ;this procedure shows the sequence editor's sliders
  4453. ;---------------------------------------------------
  4454. Statement MostraSliderEditoreSequenza{}
  4455. SHARED AreaInvisibileDelleNote
  4456. SHARED AreaInvisibileDelTempo
  4457. SHARED DurataSequenza
  4458. SHARED LarghezzaInternaFinestraEditoreSequenza
  4459. SHARED XInizioAreaVisibile
  4460. SHARED YInizioAreaVisibile
  4461.  MostraSlider{1,YInizioAreaVisibile,AreaInvisibileDelleNote,"VERTICAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  4462.  If AreaInvisibileDelTempo=0
  4463.   Disable #ListaGadgetEditoreSequenza,2
  4464.   XInizioAreaVisibile=0
  4465.  Else
  4466.   Enable #ListaGadgetEditoreSequenza,2
  4467.  EndIf
  4468.  MostraSlider{2,XInizioAreaVisibile,AreaInvisibileDelTempo,"HORIZONTAL",#ListaGadgetEditoreSequenza,#FinestraEditoreSequenza}
  4469. End Statement
  4470.  
  4471. ;-----------------------------------------------------------
  4472. ;questa procedura disegna le note di sfondo con i loro nomi
  4473. ;this procedure draws the notes background with note names
  4474. ;----------------------------------------------------------
  4475. Statement MostraLeNoteDiSfondoConILoroNomi{}
  4476. SHARED AreaInvisibileDelleNote
  4477. SHARED LarghezzaInternaFinestraEditoreSequenza
  4478. SHARED TipoDiNota()
  4479. SHARED YInizioAreaVisibile
  4480.  For Tasto.b=0 To 127-AreaInvisibileDelleNote
  4481.   Nota.b=127-Tasto-YInizioAreaVisibile
  4482.   Y0Nota.w=Tasto*8:Y1Nota.w=Y0Nota+7
  4483.   If TipoDiNota(Nota)\Diesis=True
  4484.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,0
  4485.    WColour 3,0
  4486.   Else
  4487.    WBox 16,Y0Nota,LarghezzaInternaFinestraEditoreSequenza,Y1Nota,3
  4488.    WColour 0,3
  4489.   EndIf
  4490.   WLocate 16,Y0Nota
  4491.   Print "Note ",Nota,">"
  4492.   Print TipoDiNota(Nota)\NomeInglese
  4493.   Print "-"
  4494.   Print TipoDiNota(Nota)\NomeItaliano
  4495.   Print TipoDiNota(Nota)\Ottava
  4496.  Next Tasto
  4497. End Statement
  4498.  
  4499. ;-----------------------------------------------
  4500. ;questa procedura mostra i numeri delle battute
  4501. ;this procedure shows the bar numbers
  4502. ;-------------------------------------
  4503. Statement MostraLeBattute{}
  4504. SHARED AreaInvisibileDelleNote
  4505. SHARED Battiti
  4506. SHARED EventoMusicale()
  4507. SHARED LarghezzaInternaFinestraEditoreSequenza
  4508. SHARED Misure
  4509. SHARED ScalaEventiMusicali
  4510. SHARED SequenzaSelezionata
  4511. SHARED Spazio$
  4512. SHARED TipoDiNota()
  4513. SHARED XInizioAreaVisibile
  4514. SHARED YInizioAreaVisibile
  4515.  Nota.b=127-YInizioAreaVisibile-(127-AreaInvisibileDelleNote)
  4516.  Nota$=Str$(Nota):OttavaNota$=Str$(TipoDiNota(Nota)\Ottava):NomeIngleseNota$=TipoDiNota(Nota)\NomeInglese
  4517.  NomeItalianoNota$=TipoDiNota(Nota)\NomeItaliano
  4518.  LarghezzaTesto.w=Len("Note "+Nota$+">"+NomeIngleseNota$+"-"+NomeItalianoNota$+OttavaNota$+Spazio$)*8
  4519.  FineTempo.l=XInizioAreaVisibile+(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  4520.  If TipoDiNota(Nota)\Diesis=True Then WColour 3,0 Else WColour 0,3
  4521.  Battito.b=1
  4522.  Misura.l=1
  4523.  Tempo.l=0
  4524.  Repeat
  4525.   PushItem EventoMusicale()
  4526.   ResetList EventoMusicale()
  4527.   While NextItem(EventoMusicale())=True
  4528.    If EventoMusicale()\Sequenza=SequenzaSelezionata AND EventoMusicale()\Inizio<=Tempo
  4529.     EventoMusicaleEseguito.b=EventoMusicale()\Stato & #EventoMusicaleEseguito
  4530.     If EventoMusicale()\Tipo="Tempo" AND EventoMusicaleEseguito=0
  4531.      NuoviBattiti.b=EventoMusicale()\Evento MOD 16+1
  4532.      NuoveMisure.w=2^(EventoMusicale()\Evento/16)
  4533.      If Battito>1
  4534.       Battito=1
  4535.       Misura+1
  4536.      EndIf
  4537.      TempoCambiato=True
  4538.      EventoMusicale()\Stato | #EventoMusicaleEseguito
  4539.     EndIf
  4540.    EndIf
  4541.   Wend
  4542.   PopItem EventoMusicale()
  4543.   XTempo.l=16+(Tempo-XInizioAreaVisibile)/ScalaEventiMusicali
  4544.   If XTempo>16+LarghezzaTesto-1
  4545.    WLocate XTempo,(127-AreaInvisibileDelleNote)*8
  4546.    Print Misura,".",Battito
  4547.    If TempoCambiato=True
  4548.     Tic.w=Tempo MOD (#TicDiBasePerQuarto/(NuoveMisure/4.0))
  4549.    Else
  4550.     Tic=Tempo MOD (#TicDiBasePerQuarto/(Misure/4.0))
  4551.    EndIf
  4552.    If Tic>0 Then Print ".",Tic
  4553.   EndIf
  4554.   Battute.b=Max(ScalaEventiMusicali/4,1)
  4555.   If TempoCambiato=True
  4556.    IncrementoTempo.w=(#TicDiBasePerQuarto*4.0*Battute)/NuoveMisure
  4557.   Else
  4558.    IncrementoTempo=(#TicDiBasePerQuarto*4.0*Battute)/Misure
  4559.   EndIf
  4560.   Battito+Battute
  4561.   Tempo+IncrementoTempo
  4562.   If TempoCambiato=True
  4563.    If Battito>NuoviBattiti Then Misura+Battito/NuoveMisure:Battito=1
  4564.   Else
  4565.    If Battito>Battiti Then Misura+Battito/Misure:Battito=1
  4566.   EndIf
  4567.  Until Tempo>FineTempo
  4568.  ResetList EventoMusicale()
  4569.  While NextItem(EventoMusicale())=True
  4570.   If EventoMusicale()\Tipo="Tempo"
  4571.    EventoMusicaleEseguito=EventoMusicale()\Stato & #EventoMusicaleEseguito
  4572.    If EventoMusicaleEseguito=#EventoMusicaleEseguito
  4573.     EventoMusicale()\Stato & %11110111
  4574.    EndIf
  4575.   EndIf
  4576.  Wend
  4577. End Statement
  4578.  
  4579. ;--------------------------------------------
  4580. ;questa procedura mostra gli eventi musicali
  4581. ;this procedure shows the musical events
  4582. ;----------------------------------------
  4583. Statement MostraGliEventiMusicali{}
  4584. SHARED CanaleSelezionato
  4585. SHARED EventoMusicale()
  4586. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  4587. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  4588. SHARED SequenzaSelezionata
  4589. SHARED TipoDiEventoMusicaleDiBase$
  4590. ; PushItem EventoMusicale()
  4591.  ResetList EventoMusicale()
  4592.  While NextItem(EventoMusicale())=True
  4593.   If EventoMusicale()\Sequenza=SequenzaSelezionata
  4594.    TipoDiEventoMusicale$=EventoMusicale()\Tipo
  4595.    If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  4596.     CanaleEvento.b=EventoMusicale()\Canale
  4597.     If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  4598.      InizioEvento.l=EventoMusicale()\Inizio
  4599.      StatoEvento.b=EventoMusicale()\Stato
  4600.      Select TipoDiEventoMusicale$
  4601.      Case "Note"
  4602.       Nota.b=EventoMusicale()\Evento:DurataNota.l=EventoMusicale()\Durata
  4603.       DisegnaUnEventoMusicale{"Note",Nota,InizioEvento,DurataNota,CanaleEvento,StatoEvento}
  4604.      Case "Program"
  4605.       Programma.b=EventoMusicale()\Evento
  4606.       DisegnaUnEventoMusicale{"Program",Programma,InizioEvento,0,CanaleEvento,StatoEvento}
  4607.      Case "Control"
  4608.       Controllo.b=EventoMusicale()\Evento
  4609.       DisegnaUnEventoMusicale{"Control",Controllo,InizioEvento,0,CanaleEvento,StatoEvento}
  4610.      Case "PolyAftertouch"
  4611.       PressioneMultipla.b=EventoMusicale()\Evento
  4612.       DisegnaUnEventoMusicale{"PolyAftertouch",PressioneMultipla,InizioEvento,0,CanaleEvento,StatoEvento}
  4613.      Case "MonoAftertouch"
  4614.       PressioneSingola.b=EventoMusicale()\Evento
  4615.       DisegnaUnEventoMusicale{"MonoAftertouch",PressioneSingola,InizioEvento,0,CanaleEvento,StatoEvento}
  4616.      Case "PitchBend"
  4617.       CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  4618.       DisegnaUnEventoMusicale{"PitchBend",CurvaDiPicco,InizioEvento,0,CanaleEvento,StatoEvento}
  4619.      Case "Tempo"
  4620.       Tempo.b=EventoMusicale()\Evento
  4621.       DisegnaUnEventoMusicale{"Tempo",Tempo,InizioEvento,0,CanaleEvento,StatoEvento}
  4622.      Case "BPM"
  4623.       BattutePerMinuto.w=9+EventoMusicale()\Evento*3+EventoMusicale()\Valore
  4624.       DisegnaUnEventoMusicale{"BPM",BattutePerMinuto,InizioEvento,0,CanaleEvento,StatoEvento}
  4625.      End Select
  4626.     EndIf
  4627.    EndIf
  4628.   EndIf
  4629.  Wend
  4630. ; PopItem EventoMusicale()
  4631. End Statement
  4632.  
  4633. ;----------------------------------------------------------
  4634. ;questa procedura interrompe l'esecuzione di tutte le note
  4635. ;this procedure stops all notes execution
  4636. ;-----------------------------------------
  4637. Statement InterrompiTutteLeNote{Modo.b}
  4638. SHARED AltezzaInternaFinestraEditoreSequenza
  4639. SHARED MIDIAttivato
  4640.  If MIDIAttivato=True
  4641.   If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  4642.    WJam #DueColoriConSfondoPieno
  4643.    WLocate 0,0:WColour 0,0:Print SPACE$(80)
  4644.    WLocate 0,0:WColour 3:Print "Resetting MIDI devices, please wait..."
  4645.    WJam #UnColoreConSfondoTrasparente
  4646.   EndIf
  4647.   For Canale.b=1 To 16
  4648.    EseguiIlCambioDiControllo{#_AllNotesOff,127,Canale,Modo}
  4649.    EseguiIlCambioDiControllo{#_ResetCtrl,127,Canale,Modo}
  4650.   Next Canale
  4651.  EndIf
  4652.  Quiet %1111
  4653.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  4654.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  4655.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  4656.   Messaggio$="All notes off"
  4657.   Messaggio$+SPACE$(80-XMessaggio/8-Len(Messaggio$))
  4658.   WLocate XMessaggio,YMessaggio
  4659.   WColour 1,0
  4660.   Print Messaggio$
  4661.  EndIf
  4662. End Statement
  4663.  
  4664. Statement AggiungiUnaNotaDallaTastiera{Nota$}
  4665. SHARED AreaInvisibileDelleNote
  4666. SHARED CanaleSelezionato
  4667. SHARED DurataSequenza
  4668. SHARED EventiMusicali
  4669. SHARED EventoMusicale()
  4670. SHARED LarghezzaEventoBase
  4671. SHARED NotaSuonata
  4672. SHARED OttavaSelezionata
  4673. SHARED PuntoDInserimento
  4674. SHARED SequenzaSelezionata
  4675. SHARED ValoreEventoBase
  4676.  Select Nota$
  4677.  Case "C1"
  4678.   Nota.b=0
  4679.  Case "C#1"
  4680.   Nota=1
  4681.  Case "D1"
  4682.   Nota=2
  4683.  Case "D#1"
  4684.   Nota=3
  4685.  Case "E1"
  4686.   Nota=4
  4687.  Case "F1"
  4688.   Nota=5
  4689.  Case "F#1"
  4690.   Nota=6
  4691.  Case "G1"
  4692.   Nota=7
  4693.  Case "G#1"
  4694.   Nota=8
  4695.  Case "A1"
  4696.   Nota=9
  4697.  Case "A#1"
  4698.   Nota=10
  4699.  Case "B1"
  4700.   Nota=11
  4701.  Case "C2"
  4702.   Nota=12
  4703.  Case "C#2"
  4704.   Nota=13
  4705.  Case "D2"
  4706.   Nota=14
  4707.  Case "D#2"
  4708.   Nota=15
  4709.  Case "E2"
  4710.   Nota=16
  4711.  Case "F2"
  4712.   Nota=17
  4713.  Case "F#2"
  4714.   Nota=18
  4715.  Case "G2"
  4716.   Nota=19
  4717.  Case "G#2"
  4718.   Nota=20
  4719.  Case "A2"
  4720.   Nota=21
  4721.  Case "A#2"
  4722.   Nota=22
  4723.  Case "B2"
  4724.   Nota=23
  4725.  End Select
  4726.  Nota+OttavaSelezionata*12:Nota=Min(Nota,127)
  4727.  If CanaleSelezionato>0
  4728.   LastItem EventoMusicale()
  4729.   If AddItem(EventoMusicale())=True
  4730.    EventiMusicali+1
  4731.    EventoMusicale()\Tipo="Note"
  4732.    EventoMusicale()\Evento=Nota
  4733.    EventoMusicale()\Valore=ValoreEventoBase
  4734.    EventoMusicale()\Inizio=PuntoDInserimento
  4735.    EventoMusicale()\Canale=CanaleSelezionato
  4736.    EventoMusicale()\Sequenza=SequenzaSelezionata
  4737.    EventoMusicale()\Stato=#EventoMusicaleNonSelezionato
  4738.    EventoMusicale()\Durata=LarghezzaEventoBase
  4739.    If NotaSuonata\Stato=True
  4740.     Nota.b=NotaSuonata\Evento
  4741.     VelocitaNota.b=NotaSuonata\Valore
  4742.     CanaleNota.b=NotaSuonata\Canale
  4743.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiMusicaliDallEditoreSequenza}
  4744.    EndIf
  4745.    NotaSuonata\Evento=EventoMusicale()\Evento,EventoMusicale()\Valore,EventoMusicale()\Inizio,EventoMusicale()\Durata
  4746.    NotaSuonata\Canale=EventoMusicale()\Canale
  4747.    SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  4748.    NotaSuonata\Stato=True
  4749.    PuntoDInserimento+LarghezzaEventoBase
  4750.    DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  4751.   Else
  4752.    EZRequest "AmySequencer message","You have used all the available events","OK"
  4753.   EndIf
  4754.  Else
  4755.   EZRequest "AmySequencer message","You must select a channel first","OK"
  4756.  EndIf
  4757. End Statement
  4758.  
  4759. ;-------------------------------------------------------
  4760. ;questa procedura imposta il menu dell'editore sequenza
  4761. ;this procedure sets the sequence editor menu
  4762. ;---------------------------------------------
  4763. Statement ImpostaMenuEditoreSequenza{}
  4764. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  4765. SHARED MostraNuovoValore
  4766. SHARED TipoDiEventoMusicaleDiBase$
  4767.  
  4768.  Free MenuList #ListaMenuEditoreSequenza
  4769.  
  4770.  MenuTitle #ListaMenuEditoreSequenza,0,"Controls"
  4771.  MenuItem #ListaMenuEditoreSequenza,0,0,0,"Play"
  4772.  MenuItem #ListaMenuEditoreSequenza,0,0,1,"Record"
  4773.  MenuItem #ListaMenuEditoreSequenza,0,0,2,"Stop"
  4774.  
  4775.  MenuTitle #ListaMenuEditoreSequenza,1,"Edit"
  4776.  MenuItem #ListaMenuEditoreSequenza,0,1,0,"All"
  4777.  MenuItem #ListaMenuEditoreSequenza,0,1,1,"None"
  4778.  MenuItem #ListaMenuEditoreSequenza,0,1,2,"Toggle"
  4779.  MenuItem #ListaMenuEditoreSequenza,0,1,3,"Cut"
  4780.  MenuItem #ListaMenuEditoreSequenza,0,1,4,"Copy"
  4781.  MenuItem #ListaMenuEditoreSequenza,0,1,5,"Paste"
  4782.  MenuItem #ListaMenuEditoreSequenza,0,1,6,"Forget"
  4783.  MenuItem #ListaMenuEditoreSequenza,0,1,7,"Goto"
  4784.  
  4785.  MenuTitle #ListaMenuEditoreSequenza,2,"Event type"
  4786.  Select TipoDiEventoMusicaleDiBase$
  4787.  Case "Note"
  4788.   MenuItem #ListaMenuEditoreSequenza,4,2,0,"  Note"
  4789.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4790.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4791.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4792.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4793.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4794.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4795.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4796.  Case "Program"
  4797.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4798.   MenuItem #ListaMenuEditoreSequenza,4,2,1,"  Program"
  4799.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4800.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4801.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4802.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4803.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4804.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4805.  Case "Control"
  4806.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4807.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4808.   MenuItem #ListaMenuEditoreSequenza,4,2,2,"  Control"
  4809.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4810.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4811.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4812.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4813.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4814.  Case "PolyAftertouch"
  4815.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4816.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4817.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4818.   MenuItem #ListaMenuEditoreSequenza,4,2,3,"  PolyPressure"
  4819.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4820.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4821.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4822.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4823.  Case "MonoAftertouch"
  4824.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4825.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4826.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4827.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4828.   MenuItem #ListaMenuEditoreSequenza,4,2,4,"  MonoPressure"
  4829.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4830.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4831.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4832.  Case "PitchBend"
  4833.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4834.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4835.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4836.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4837.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4838.   MenuItem #ListaMenuEditoreSequenza,4,2,5,"  PitchBend"
  4839.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4840.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4841.  Case "Tempo"
  4842.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4843.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4844.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4845.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4846.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4847.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4848.   MenuItem #ListaMenuEditoreSequenza,4,2,6,"  Tempo"
  4849.   MenuItem #ListaMenuEditoreSequenza,2,2,7,"  BPM"
  4850.  Case "BPM"
  4851.   MenuItem #ListaMenuEditoreSequenza,2,2,0,"  Note"
  4852.   MenuItem #ListaMenuEditoreSequenza,2,2,1,"  Program"
  4853.   MenuItem #ListaMenuEditoreSequenza,2,2,2,"  Control"
  4854.   MenuItem #ListaMenuEditoreSequenza,2,2,3,"  PolyPressure"
  4855.   MenuItem #ListaMenuEditoreSequenza,2,2,4,"  MonoPressure"
  4856.   MenuItem #ListaMenuEditoreSequenza,2,2,5,"  PitchBend"
  4857.   MenuItem #ListaMenuEditoreSequenza,2,2,6,"  Tempo"
  4858.   MenuItem #ListaMenuEditoreSequenza,4,2,7,"  BPM"
  4859.  End Select
  4860.  If MostraSoloGliEventiMusicaliDelloStessoTipo=True
  4861.   MenuItem #ListaMenuEditoreSequenza,3,2,8,"  Alone"
  4862.  Else
  4863.   MenuItem #ListaMenuEditoreSequenza,1,2,8,"  Alone"
  4864.  EndIf
  4865.  
  4866.  MenuTitle #ListaMenuEditoreSequenza,3,"Settings"
  4867.  MenuItem #ListaMenuEditoreSequenza,0,3,0,"Basic event"
  4868.  If MostraNuovoValore=True
  4869.   MenuItem #ListaMenuEditoreSequenza,3,3,1,"  Show dragged event value"
  4870.  Else
  4871.   MenuItem #ListaMenuEditoreSequenza,1,3,1,"  Show dragged event value"
  4872.  EndIf
  4873.  
  4874.  MenuTitle #ListaMenuEditoreSequenza,4,"Help"
  4875.  MenuItem #ListaMenuEditoreSequenza,0,4,0,"Keys to use"
  4876.  MenuItem #ListaMenuEditoreSequenza,0,4,1,"Notes on keys"
  4877.  
  4878. ;-------------------------------
  4879. ;attacca il menu' alla finestra
  4880. ;attaches menu to window
  4881. ;------------------------
  4882.  SetMenu #ListaMenuEditoreSequenza
  4883.  
  4884. End Statement
  4885.  
  4886. ;------------------------------------------------------------
  4887. ;questa procedura selezione e/o modifica gli eventi musicali
  4888. ;this procedure selectes and/or modifies the musical events
  4889. ;-----------------------------------------------------------
  4890. Statement Selezione{Modo.b}
  4891. SHARED AltezzaInternaFinestraEditoreSequenza
  4892. SHARED AreaVisibileDeiValori
  4893. SHARED CanaleSelezionato
  4894. SHARED ColoriOriginali
  4895. SHARED DurataSequenza
  4896. SHARED EventoMusicale()
  4897. SHARED EventoMusicaleSelezionato
  4898. SHARED EventoMusicaleSpostatoConIlTopo
  4899. SHARED EventiMusicali
  4900. SHARED EventiMusicaliSelezionati
  4901. SHARED LarghezzaInternaFinestraEditoreSequenza
  4902. SHARED LarghezzaEventoBase
  4903. SHARED MIDIAttivato
  4904. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  4905. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  4906. SHARED NotaSuonata
  4907. SHARED PeriFreq()
  4908. SHARED PuntoDInserimento
  4909. SHARED ScalaEventiMusicali
  4910. SHARED SequenzaSelezionata
  4911. SHARED Suono()
  4912. SHARED TastoDelTopoCliccato
  4913. SHARED TipoDiEventoMusicaleDiBase$
  4914. SHARED ValoreEventoBase
  4915. SHARED XInizioAreaVisibile
  4916. SHARED XTopo
  4917. SHARED YInizioAreaVisibile
  4918. SHARED YTopo
  4919.  ResetList EventoMusicale()
  4920.  XTopo=Min(Max(XTopo,16),LarghezzaInternaFinestraEditoreSequenza-1)
  4921.  YTopo=Min(Max(YTopo,0),AreaVisibileDeiValori-1)
  4922.  StessoEvento.b=%00000
  4923.  While NextItem(EventoMusicale())=True
  4924.   StessoEvento=%00000
  4925.   TipoDiEventoMusicale$=EventoMusicale()\Tipo
  4926.   If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  4927.    CanaleEvento.b=EventoMusicale()\Canale
  4928.    If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  4929.     InizioEvento.l=EventoMusicale()\Inizio
  4930.     SequenzaEvento.w=EventoMusicale()\Sequenza
  4931.     SelezioneEventoMusicale.b=EventoMusicale()\Stato & #EventoMusicaleSelezionato
  4932.     EventoMusicaleTagliato.b=EventoMusicale()\Stato & #EventoMusicaleTagliato
  4933.     EventoMusicaleCopiato.b=EventoMusicale()\Stato & #EventoMusicaleCopiato
  4934.     If Modo=#SelezionaUnEventoMusicale
  4935.      Select TipoDiEventoMusicale$
  4936.      Case "Note"
  4937.       Nota.b=Min(Max(EventoMusicale()\Evento,0),127)
  4938.       DurataNota.l=EventoMusicale()\Durata
  4939.       FineNota.l=InizioEvento+DurataNota-1
  4940.       VelocitaNota.b=EventoMusicale()\Valore
  4941.       XPosizioneNota.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  4942.       YPosizioneNota.b=127-YInizioAreaVisibile-YTopo/8
  4943.       If XPosizioneNota>=InizioEvento Then StessoEvento | %00001
  4944.       If XPosizioneNota<=FineNota Then StessoEvento | %00010
  4945.       If YPosizioneNota=Nota Then StessoEvento | %00100
  4946.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  4947.       If StessoEvento=%01111
  4948.        If CanaleSelezionato<>CanaleEvento
  4949.         If CanaleSelezionato=0
  4950.          CanaleSelezionato=CanaleEvento
  4951.          Format "00"
  4952.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4953.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  4954.          Print Str$(CanaleSelezionato)
  4955.          Format ""
  4956.          StessoEvento | %10000
  4957.         Else
  4958.          AggiungiEvento.b=EZRequest("AmySequencer message","Would you add a new note|with the current channel?","Yes|No")
  4959.          If AggiungiEvento=1
  4960.           CanaleEvento=CanaleSelezionato
  4961.          Else
  4962.           Format "00"
  4963.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4964.           If ColoriOriginali=True
  4965.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  4966.           Else
  4967.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  4968.           EndIf
  4969.           Print Str$(CanaleSelezionato)
  4970.           CanaleSelezionato=CanaleEvento
  4971.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  4972.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  4973.           Print Str$(CanaleSelezionato)
  4974.           Format ""
  4975.           StessoEvento | %10000
  4976.          EndIf
  4977.         EndIf
  4978. ;       Else
  4979. ;        EventoMusicaleSelezionato=EventoMusicale()\Evento
  4980. ;        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  4981. ;        ImpostaMenuEditoreSequenza{}
  4982. ;        StessoEvento | %10000
  4983. ;        Pop If:Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  4984.        EndIf
  4985.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  4986.         If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  4987.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneNota,YPosizioneNota}
  4988.         EndIf
  4989.         If EventoMusicaleSpostatoConIlTopo=False
  4990.          EventiMusicaliSelezionati-1
  4991.          EventoMusicale()\Stato & %11111110
  4992.         Else
  4993.          Nota=EventoMusicale()\Evento
  4994.          InizioNota=EventoMusicale()\Inizio
  4995.         EndIf
  4996.        Else
  4997.         NotaPiuLunga.l=DurataNota
  4998.         EventiMusicaliSelezionati+1
  4999.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5000.        EndIf
  5001.        NotaSuonata\Evento=Nota,VelocitaNota,0,DurataNota,CanaleEvento
  5002.        SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  5003.        NotaSuonata\Stato=True
  5004.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5005.        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5006.        ImpostaMenuEditoreSequenza{}
  5007.        StessoEvento | %10000
  5008.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5009.       EndIf
  5010.      Case "Program"
  5011.       Programma.b=Min(Max(EventoMusicale()\Evento,0),127)
  5012.       LunghezzaEvento.w=Len("Program000")*8
  5013.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5014.       FineProgramma.w=InizioEvento+LunghezzaEvento-1
  5015.       XPosizioneProgramma.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5016.       YPosizioneProgramma.b=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5017.       If XPosizioneProgramma>=InizioEvento Then StessoEvento | %00001
  5018.       If XPosizioneProgramma<=FineProgramma Then StessoEvento | %00010
  5019.       If YPosizioneProgramma=Programma Then StessoEvento | %00100
  5020.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5021.       If StessoEvento=%01111
  5022.        If CanaleSelezionato<>CanaleEvento
  5023.         If CanaleSelezionato=0
  5024.          CanaleSelezionato=CanaleEvento
  5025.          Format "00"
  5026.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5027.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5028.          Print Str$(CanaleSelezionato)
  5029.          Format ""
  5030.          StessoEvento | %10000
  5031.         Else
  5032.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new program|with the current channel?","Yes|No")
  5033.          If AggiungiEvento=1
  5034.           CanaleEvento=CanaleSelezionato
  5035.          Else
  5036.           Format "00"
  5037.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5038.           If ColoriOriginali=True
  5039.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5040.           Else
  5041.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5042.           EndIf
  5043.           Print Str$(CanaleSelezionato)
  5044.           CanaleSelezionato=CanaleEvento
  5045.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5046.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5047.           Print Str$(CanaleSelezionato)
  5048.           Format ""
  5049.           StessoEvento | %10000
  5050.          EndIf
  5051.         EndIf
  5052. ;       Else
  5053. ;        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5054. ;        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5055. ;        ImpostaMenuEditoreSequenza{}
  5056. ;        StessoEvento | %10000
  5057. ;        Pop If:Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5058.        EndIf
  5059.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5060.         If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  5061.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneProgramma,YPosizioneProgramma}
  5062.         EndIf
  5063.         If EventoMusicaleSpostatoConIlTopo=False
  5064.          EventiMusicaliSelezionati-1
  5065.          EventoMusicale()\Stato & %11111110
  5066.         EndIf
  5067.        Else
  5068.         EventiMusicaliSelezionati+1
  5069.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5070.        EndIf
  5071.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5072.        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5073.        ImpostaMenuEditoreSequenza{}
  5074.        StessoEvento | %10000
  5075.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5076.       EndIf
  5077.      Case "Control"
  5078.       Controllo.b=Min(Max(EventoMusicale()\Evento,0),127)
  5079.       LunghezzaEvento=Len("Control000")*8
  5080.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5081.       FineControllo.w=InizioEvento+LunghezzaEvento-1
  5082.       XPosizioneControllo.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5083.       YPosizioneControllo.b=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5084.       If XPosizioneControllo>=InizioEvento Then StessoEvento | %00001
  5085.       If XPosizioneControllo<=FineControllo Then StessoEvento | %00010
  5086.       If YPosizioneControllo=Controllo Then StessoEvento | %00100
  5087.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5088.       If StessoEvento=%01111
  5089.        If CanaleSelezionato<>CanaleEvento
  5090.         If CanaleSelezionato=0
  5091.          CanaleSelezionato=CanaleEvento
  5092.          Format "00"
  5093.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5094.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5095.          Print Str$(CanaleSelezionato)
  5096.          Format ""
  5097.          StessoEvento | %10000
  5098.         Else
  5099.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new control|with the current channel?","Yes|No")
  5100.          If AggiungiEvento=1
  5101.           CanaleEvento=CanaleSelezionato
  5102.          Else
  5103.           Format "00"
  5104.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5105.           If ColoriOriginali=True
  5106.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5107.           Else
  5108.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5109.           EndIf
  5110.           Print Str$(CanaleSelezionato)
  5111.           CanaleSelezionato=CanaleEvento
  5112.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5113.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5114.           Print Str$(CanaleSelezionato)
  5115.           Format ""
  5116.           StessoEvento | %10000
  5117.          EndIf
  5118.         EndIf
  5119. ;       Else
  5120. ;        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5121. ;        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5122. ;        ImpostaMenuEditoreSequenza{}
  5123. ;        StessoEvento | %10000
  5124. ;        Pop If:Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5125.        EndIf
  5126.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5127.         If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  5128.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneControllo,YPosizioneControllo}
  5129.         EndIf
  5130.         If EventoMusicaleSpostatoConIlTopo=False
  5131.          EventiMusicaliSelezionati-1
  5132.          EventoMusicale()\Stato & %11111110
  5133.         EndIf
  5134.        Else
  5135.         EventiMusicaliSelezionati+1
  5136.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5137.        EndIf
  5138.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5139.        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5140.        ImpostaMenuEditoreSequenza{}
  5141.        StessoEvento | %10000
  5142.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5143.       EndIf
  5144.      Case "PolyAftertouch"
  5145.       PressioneMultipla.b=Min(Max(EventoMusicale()\Evento,0),127)
  5146.       LunghezzaEvento=Len("Poly000")*8
  5147.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5148.       FinePressioneMultipla.w=InizioEvento+LunghezzaEvento-1
  5149.       XPosizionePressioneMultipla.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5150.       YPosizionePressioneMultipla.b=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5151.       If XPosizionePressioneMultipla>=InizioEvento Then StessoEvento | %00001
  5152.       If XPosizionePressioneMultipla<=FinePressioneMultipla Then StessoEvento | %00010
  5153.       If YPosizionePressioneMultipla=PressioneMultipla Then StessoEvento | %00100
  5154.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5155.       If StessoEvento=%01111
  5156.        If CanaleSelezionato<>CanaleEvento
  5157.         If CanaleSelezionato=0
  5158.          CanaleSelezionato=CanaleEvento
  5159.          Format "00"
  5160.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5161.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5162.          Print Str$(CanaleSelezionato)
  5163.          Format ""
  5164.          StessoEvento | %10000
  5165.         Else
  5166.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new poly|pressure with the current channel?","Yes|No")
  5167.          If AggiungiEvento=1
  5168.           CanaleEvento=CanaleSelezionato
  5169.          Else
  5170.           Format "00"
  5171.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5172.           If ColoriOriginali=True
  5173.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5174.           Else
  5175.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5176.           EndIf
  5177.           Print Str$(CanaleSelezionato)
  5178.           CanaleSelezionato=CanaleEvento
  5179.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5180.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5181.           Print Str$(CanaleSelezionato)
  5182.           Format ""
  5183.           StessoEvento | %10000
  5184.          EndIf
  5185.         EndIf
  5186. ;       Else
  5187. ;        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5188. ;        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5189. ;        ImpostaMenuEditoreSequenza{}
  5190. ;        StessoEvento | %10000
  5191. ;        Pop If:Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5192.        EndIf
  5193.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5194.         If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  5195.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizionePressioneMultipla,YPosizionePressioneMultipla}
  5196.         EndIf
  5197.         If EventoMusicaleSpostatoConIlTopo=False
  5198.          EventiMusicaliSelezionati-1
  5199.          EventoMusicale()\Stato & %11111110
  5200.         EndIf
  5201.        Else
  5202.         EventiMusicaliSelezionati+1
  5203.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5204.        EndIf
  5205.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5206.        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5207.        ImpostaMenuEditoreSequenza{}
  5208.        StessoEvento | %10000
  5209.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5210.       EndIf
  5211.      Case "MonoAftertouch"
  5212.       PressioneSingola.b=Min(Max(EventoMusicale()\Evento,0),127)
  5213.       LunghezzaEvento=Len("Mono000")*8
  5214.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5215.       FinePressioneSingola.w=InizioEvento+LunghezzaEvento-1
  5216.       XPosizionePressioneSingola.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5217.       YPosizionePressioneSingola.b=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5218.       If XPosizionePressioneSingola>=InizioEvento Then StessoEvento | %00001
  5219.       If XPosizionePressioneSingola<=FinePressioneSingola Then StessoEvento | %00010
  5220.       If YPosizionePressioneSingola=PressioneSingola Then StessoEvento | %00100
  5221.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5222.       If StessoEvento=%01111
  5223.        If CanaleSelezionato<>CanaleEvento
  5224.         If CanaleSelezionato=0
  5225.          CanaleSelezionato=CanaleEvento
  5226.          Format "00"
  5227.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5228.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5229.          Print Str$(CanaleSelezionato)
  5230.          Format ""
  5231.          StessoEvento | %10000
  5232.         Else
  5233.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new mono|pressure with the current channel?","Yes|No")
  5234.          If AggiungiEvento=1
  5235.           CanaleEvento=CanaleSelezionato
  5236.          Else
  5237.           Format "00"
  5238.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5239.           If ColoriOriginali=True
  5240.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5241.           Else
  5242.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5243.           EndIf
  5244.           Print Str$(CanaleSelezionato)
  5245.           CanaleSelezionato=CanaleEvento
  5246.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5247.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5248.           Print Str$(CanaleSelezionato)
  5249.           Format ""
  5250.           StessoEvento | %10000
  5251.          EndIf
  5252.         EndIf
  5253. ;       Else
  5254. ;        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5255. ;        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5256. ;        ImpostaMenuEditoreSequenza{}
  5257. ;        StessoEvento | %10000
  5258. ;        Pop If:Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5259.        EndIf
  5260.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5261.         If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  5262.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizionePressioneSingola,YPosizionePressioneSingola}
  5263.         EndIf
  5264.         If EventoMusicaleSpostatoConIlTopo=False
  5265.          EventiMusicaliSelezionati-1
  5266.          EventoMusicale()\Stato & %11111110
  5267.         EndIf
  5268.        Else
  5269.         EventiMusicaliSelezionati+1
  5270.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5271.        EndIf
  5272.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5273.        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5274.        ImpostaMenuEditoreSequenza{}
  5275.        StessoEvento | %10000
  5276.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5277.       EndIf
  5278.      Case "PitchBend"
  5279.       CurvaDiPicco.b=Min(Max(EventoMusicale()\Evento,0),127)
  5280.       LunghezzaEvento=Len("Bend+0000")*8
  5281.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5282.       FineCurvaDiPicco.w=InizioEvento+LunghezzaEvento-1
  5283.       XPosizioneCurvaDiPicco.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5284.       YPosizioneCurvaDiPicco.b=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5285.       If XPosizioneCurvaDiPicco>=InizioEvento Then StessoEvento | %00001
  5286.       If XPosizioneCurvaDiPicco<=FineCurvaDiPicco Then StessoEvento | %00010
  5287.       If YPosizioneCurvaDiPicco=CurvaDiPicco Then StessoEvento | %00100
  5288.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5289.       If StessoEvento=%01111
  5290.        If CanaleSelezionato<>CanaleEvento
  5291.         If CanaleSelezionato=0
  5292.          CanaleSelezionato=CanaleEvento
  5293.          Format "00"
  5294.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5295.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5296.          Print Str$(CanaleSelezionato)
  5297.          Format ""
  5298.          StessoEvento | %10000
  5299.         Else
  5300.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new pitch bend|with the current channel?","Yes|No")
  5301.          If AggiungiEvento=1
  5302.           CanaleEvento=CanaleSelezionato
  5303.          Else
  5304.           Format "00"
  5305.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5306.           If ColoriOriginali=True
  5307.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5308.           Else
  5309.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5310.           EndIf
  5311.           Print Str$(CanaleSelezionato)
  5312.           CanaleSelezionato=CanaleEvento
  5313.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5314.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5315.           Print Str$(CanaleSelezionato)
  5316.           Format ""
  5317.           StessoEvento | %10000
  5318.          EndIf
  5319.         EndIf
  5320. ;       Else
  5321. ;        EventoMusicaleSelezionato=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  5322. ;        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5323. ;        ImpostaMenuEditoreSequenza{}
  5324. ;        StessoEvento | %10000
  5325. ;        Pop If:Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5326.        EndIf
  5327.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5328.         If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  5329.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneCurvaDiPicco,YPosizioneCurvaDiPicco}
  5330.         EndIf
  5331.         If EventoMusicaleSpostatoConIlTopo=False
  5332.          EventiMusicaliSelezionati-1
  5333.          EventoMusicale()\Stato & %11111110
  5334.         EndIf
  5335.        Else
  5336.         EventiMusicaliSelezionati+1
  5337.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5338.        EndIf
  5339.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5340.        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5341.        ImpostaMenuEditoreSequenza{}
  5342.        StessoEvento | %10000
  5343.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5344.       EndIf
  5345.      Case "Tempo"
  5346.       Tempo.b=Min(Max(EventoMusicale()\Evento,0),127)
  5347.       LunghezzaEvento=Len("Tempo00/000")*8
  5348.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5349.       FineTempo.w=InizioEvento+LunghezzaEvento-1
  5350.       XPosizioneTempo.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5351.       YPosizioneTempo.b=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5352.       If XPosizioneTempo>=InizioEvento Then StessoEvento | %00001
  5353.       If XPosizioneTempo<=FineTempo Then StessoEvento | %00010
  5354.       If YPosizioneTempo=Tempo Then StessoEvento | %00100
  5355.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5356.       If StessoEvento=%01111
  5357.        If CanaleSelezionato<>CanaleEvento
  5358.         If CanaleSelezionato=0
  5359.          CanaleSelezionato=CanaleEvento
  5360.          Format "00"
  5361.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5362.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5363.          Print Str$(CanaleSelezionato)
  5364.          Format ""
  5365.          StessoEvento | %10000
  5366.         Else
  5367.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new tempo|with the current channel?","Yes|No")
  5368.          If AggiungiEvento=1
  5369.           CanaleEvento=CanaleSelezionato
  5370.          Else
  5371.           Format "00"
  5372.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5373.           If ColoriOriginali=True
  5374.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5375.           Else
  5376.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5377.           EndIf
  5378.           Print Str$(CanaleSelezionato)
  5379.           CanaleSelezionato=CanaleEvento
  5380.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5381.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5382.           Print Str$(CanaleSelezionato)
  5383.           Format ""
  5384.           StessoEvento | %10000
  5385.          EndIf
  5386.         EndIf
  5387. ;       Else
  5388. ;        EventoMusicaleSelezionato=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  5389. ;        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5390. ;        ImpostaMenuEditoreSequenza{}
  5391. ;        StessoEvento | %10000
  5392. ;        Pop If:Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5393.        EndIf
  5394.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5395.         If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  5396.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneTempo,YPosizioneTempo}
  5397.         EndIf
  5398.         If EventoMusicaleSpostatoConIlTopo=False
  5399.          EventiMusicaliSelezionati-1
  5400.          EventoMusicale()\Stato & %11111110
  5401.         EndIf
  5402.        Else
  5403.         EventiMusicaliSelezionati+1
  5404.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5405.        EndIf
  5406.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5407.        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5408.        ImpostaMenuEditoreSequenza{}
  5409.        StessoEvento | %10000
  5410.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5411.       EndIf
  5412.      Case "BPM"
  5413.       BattutePerMinuto.b=Min(Max(EventoMusicale()\Evento,0),127)
  5414.       LunghezzaEvento=Len("BPM000")*8
  5415.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato Then LunghezzaEvento+Len("X")*8
  5416.       FineBattutePerMinuto.w=InizioEvento+LunghezzaEvento-1
  5417.       XPosizioneBattutePerMinuto.l=XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali
  5418.       YPosizioneBattutePerMinuto.b=97-YTopo*1.0*97/(AreaVisibileDeiValori-1)
  5419.       If XPosizioneBattutePerMinuto>=InizioEvento Then StessoEvento | %00001
  5420.       If XPosizioneBattutePerMinuto<=FineBattutePerMinuto Then StessoEvento | %00010
  5421.       If YPosizioneBattutePerMinuto=BattutePerMinuto Then StessoEvento | %00100
  5422.       If SequenzaEvento=SequenzaSelezionata Then StessoEvento | %01000
  5423.       If StessoEvento=%01111
  5424.        If CanaleSelezionato<>CanaleEvento
  5425.         If CanaleSelezionato=0
  5426.          CanaleSelezionato=CanaleEvento
  5427.          Format "00"
  5428.          WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5429.          WColour CanaleSelezionato-1,16-CanaleSelezionato
  5430.          Print Str$(CanaleSelezionato)
  5431.          Format ""
  5432.          StessoEvento | %10000
  5433.         Else
  5434.          AggiungiEvento=EZRequest("AmySequencer message","Would you add a new BPM|with the current channel?","Yes|No")
  5435.          If AggiungiEvento=1
  5436.           CanaleEvento=CanaleSelezionato
  5437.          Else
  5438.           Format "00"
  5439.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5440.           If ColoriOriginali=True
  5441.            WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  5442.           Else
  5443.            WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  5444.           EndIf
  5445.           Print Str$(CanaleSelezionato)
  5446.           CanaleSelezionato=CanaleEvento
  5447.           WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  5448.           WColour CanaleSelezionato-1,16-CanaleSelezionato
  5449.           Print Str$(CanaleSelezionato)
  5450.           Format ""
  5451.           StessoEvento | %10000
  5452.          EndIf
  5453.         EndIf
  5454. ;       Else
  5455. ;        EventoMusicaleSelezionato=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  5456. ;        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5457. ;        ImpostaMenuEditoreSequenza{}
  5458. ;        StessoEvento | %10000
  5459. ;        Pop If:Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5460.        EndIf
  5461.        If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5462.         If TastoDelTopoCliccato=#TastoSinistroDelTopoPremuto
  5463.          MuoviConIlTopoGliEventiMusicaliSelezionati{XPosizioneBattutePerMinuto,YPosizioneBattutePerMinuto}
  5464.         EndIf
  5465.         If EventoMusicaleSpostatoConIlTopo=False
  5466.          EventiMusicaliSelezionati-1
  5467.          EventoMusicale()\Stato & %11111110
  5468.         EndIf
  5469.        Else
  5470.         EventiMusicaliSelezionati+1
  5471.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5472.        EndIf
  5473.        EventoMusicaleSelezionato=EventoMusicale()\Evento
  5474.        TipoDiEventoMusicaleDiBase$=TipoDiEventoMusicale$
  5475.        ImpostaMenuEditoreSequenza{}
  5476.        StessoEvento | %10000
  5477.        Pop If:Pop Select:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileSelezione
  5478.       EndIf
  5479.      End Select
  5480.     Else
  5481.      If EventoMusicale()\Sequenza=SequenzaSelezionata
  5482.       If SelezioneEventoMusicale=#EventoMusicaleSelezionato
  5483.        Select Modo
  5484.        Case #CambiaIlCanaleDegliEventiMusicaliSelezionati
  5485.         EventoMusicale()\Canale=CanaleSelezionato
  5486.        Case #AlzaDiUnoGliEventiMusicaliSelezionati
  5487.         If TipoDiEventoMusicale$="BPM"
  5488.          If EventoMusicale()\Evento<97
  5489.           EventoMusicale()\Valore+1
  5490.           If EventoMusicale()\Valore>2
  5491.            EventoMusicale()\Valore=0:EventoMusicale()\Evento+1
  5492.           EndIf
  5493.          EndIf
  5494.         Else
  5495.          If EventoMusicale()\Evento<127 Then EventoMusicale()\Evento+1
  5496.         EndIf
  5497.        Case #AbbassaDiUnoGliEventiMusicaliSelezionati
  5498.         If TipoDiEventoMusicale$="BPM"
  5499.          If EventoMusicale()\Evento>0
  5500.           EventoMusicale()\Valore-1
  5501.           If EventoMusicale()\Valore<0
  5502.            EventoMusicale()\Valore=2:EventoMusicale()\Evento-1
  5503.           EndIf
  5504.          Else
  5505.           If EventoMusicale()\Valore>1 Then EventoMusicale()\Valore-1
  5506.          EndIf
  5507.         Else
  5508.          If EventoMusicale()\Evento>0 Then EventoMusicale()\Evento-1
  5509.         EndIf
  5510.        Case #SpostaAvantiNelTempoGliEventiMusicaliSelezionati
  5511.         EventoMusicale()\Inizio+LarghezzaEventoBase
  5512.        Case #SpostaIndietroNelTempoGliEventiMusicaliSelezionati
  5513.         EventoMusicale()\Inizio-LarghezzaEventoBase:If EventoMusicale()\Inizio<0 Then EventoMusicale()\Inizio=0
  5514.        Case #EliminaGliEventiMusicaliSelezionati
  5515.         DurataEventoMusicale.l=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  5516.         EventoMusicale()\Tipo="",0,0,0,0,0,0,0:KillItem EventoMusicale()
  5517.         EventiMusicali-1:EventiMusicaliSelezionati-1
  5518.         If EventiMusicali=0 Then DurataSequenza=0
  5519.        Case #DeselezionaTuttiGliEventiMusicali
  5520.         EventiMusicaliSelezionati-1
  5521.         EventoMusicale()\Stato & %11111110
  5522.        Case #InvertiLaSelezioneDiTuttiGliEventiMusicali
  5523.         EventiMusicaliSelezionati-1
  5524.         EventoMusicale()\Stato & %11111110
  5525.        Case #TagliaGliEventiMusicaliSelezionati
  5526.         EventoMusicale()\Stato | #EventoMusicaleTagliato
  5527.        Case #CopiaGliEventiMusicaliSelezionati
  5528.         EventoMusicale()\Stato | #EventoMusicaleCopiato
  5529.        End Select
  5530.        Select TipoDiEventoMusicale$
  5531.        Case "Note"
  5532.         Select Modo
  5533.         Case #AllungaLaDurataDelleNoteSelezionate
  5534.          If EventoMusicale()\Durata=#_MClksPerSP
  5535.           EventoMusicale()\Durata=LarghezzaEventoBase
  5536.          Else
  5537.           EventoMusicale()\Durata+LarghezzaEventoBase
  5538.          EndIf
  5539.          NotaPiuLunga=Max(NotaPiuLunga,EventoMusicale()\Durata)
  5540.          DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  5541.         Case #RiduciLaDurataDelleNoteSelezionate
  5542.          EventoMusicale()\Durata-LarghezzaEventoBase
  5543.          EventoMusicale()\Durata=Max(EventoMusicale()\Durata,#_MClksPerSP)
  5544.          NotaPiuLunga=Max(EventoMusicale()\Durata,NotaPiuLunga)
  5545.         Case #AlzaDiUnOttavaLeNoteSelezionate
  5546.          EventoMusicale()\Evento+12
  5547.          EventoMusicale()\Evento=Min(EventoMusicale()\Evento,127)
  5548.         Case #AbbassaDiUnOttavaLeNoteSelezionate
  5549.          EventoMusicale()\Evento-12
  5550.          EventoMusicale()\Evento=Max(EventoMusicale()\Evento,0)
  5551.         Case #CambiaIlValoreDegliEventiMusicaliSelezionati
  5552.          EventoMusicale()\Valore=ValoreEventoBase
  5553.         End Select
  5554.        Case "Tempo"
  5555.         NuoviBattiti.b=EventoMusicale()\Evento MOD 16+1
  5556.         NuoveMisure.w=2^(EventoMusicale()\Evento/16)
  5557.         Select Modo
  5558.         Case #AggiungiUnBattitoAlTempoSelezionato
  5559.          NuoviBattiti+1
  5560.          NuoviBattiti=Min(NuoviBattiti,16)
  5561.         Case #TogliUnBattitoAlTempoSelezionato
  5562.          NuoviBattiti-1
  5563.          NuoviBattiti=Max(NuoviBattiti,1)
  5564.         Case #AggiungiUnaMisuraAlTempoSelezionato
  5565.          NuoveMisure+NuoveMisure
  5566.          NuoveMisure=Min(NuoveMisure,128)
  5567.         Case #TogliUnaMisuraAlTempoSelezionato
  5568.          NuoveMisure/2
  5569.          NuoveMisure=Max(NuoveMisure,1)
  5570.         End Select
  5571.         EventoMusicale()\Evento=EsponenteDiDue{NuoveMisure}*16+NuoviBattiti-1
  5572.        Case "BPM"
  5573.         Select Modo
  5574.         Case #AggiungiDieciAgliEventiMusicaliSelezionati
  5575.          If EventoMusicale()\Evento<94
  5576.           EventoMusicale()\Evento+3
  5577.           EventoMusicale()\Valore+1
  5578.           If EventoMusicale()\Valore>2
  5579.            EventoMusicale()\Valore=0:EventoMusicale()\Evento+1
  5580.           EndIf
  5581.          EndIf
  5582.         Case #SottraiDieciAgliEventiMusicaliSelezionati
  5583.          If EventoMusicale()\Evento>3
  5584.           EventoMusicale()\Evento-3:EventoMusicale()\Valore-1
  5585.           If EventoMusicale()\Valore<0
  5586.            EventoMusicale()\Evento-1:EventoMusicale()\Valore=2
  5587.           EndIf
  5588.          Else
  5589.           If EventoMusicale()\Evento>2 AND EventoMusicale()\Valore>1
  5590.            EventoMusicale()\Evento-3:EventoMusicale()\Valore-1
  5591.           EndIf
  5592.          EndIf
  5593.         End Select
  5594.        Default
  5595.         EventoMusicale.w=EventoMusicale()\Evento
  5596.         Select Modo
  5597.         Case #AggiungiOttoAgliEventiMusicaliSelezionati
  5598.          EventoMusicale+8:EventoMusicale()\Evento=Min(EventoMusicale,127)
  5599.         Case #SottraiOttoAgliEventiMusicaliSelezionati
  5600.          EventoMusicale-8:EventoMusicale()\Evento=Max(EventoMusicale,0)
  5601.         End Select
  5602.        End Select
  5603.       Else
  5604.        Select Modo
  5605.        Case #SelezionaTuttiGliEventiMusicali
  5606.         EventiMusicaliSelezionati+1
  5607.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5608.        Case #InvertiLaSelezioneDiTuttiGliEventiMusicali
  5609.         EventiMusicaliSelezionati+1
  5610.         EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5611.        End Select
  5612.       EndIf
  5613.       If Modo=#IncollaGliEventiMusicali AND EventoMusicaleTagliato=#EventoMusicaleTagliato
  5614.        EventoMusicale()\Inizio+PuntoDInserimento
  5615.        EventoMusicale()\Stato & %11111101
  5616.        EventoMusicale()\Stato & #EventoMusicaleCopiato
  5617.       EndIf
  5618.      EndIf
  5619.     EndIf
  5620.    EndIf
  5621.   EndIf
  5622.  Wend
  5623. FineCicloWhileSelezione
  5624.  If Modo=#SelezionaUnEventoMusicale AND StessoEvento<%11111
  5625.   If CanaleSelezionato>0
  5626.    LastItem EventoMusicale()
  5627.    If AddItem(EventoMusicale())=True
  5628.     EventiMusicali+1
  5629.     EventoMusicale()\Inizio=(XInizioAreaVisibile+(XTopo-16)*ScalaEventiMusicali)/LarghezzaEventoBase*LarghezzaEventoBase
  5630.     EventoMusicale()\Canale=CanaleSelezionato
  5631.     EventoMusicale()\Sequenza=SequenzaSelezionata
  5632.     EventoMusicale()\Stato=0
  5633.     EventoMusicale()\Tipo=TipoDiEventoMusicaleDiBase$
  5634.     Select TipoDiEventoMusicaleDiBase$
  5635.     Case "Note"
  5636.      EventoMusicale()\Evento=127-YInizioAreaVisibile-YTopo/8
  5637.      EventoMusicale()\Valore=ValoreEventoBase
  5638.      EventoMusicale()\Durata=LarghezzaEventoBase
  5639.      NotaSuonata\Evento=EventoMusicale()\Evento,EventoMusicale()\Valore,0,EventoMusicale()\Durata,EventoMusicale()\Canale
  5640.      SuonaLaNota{NotaSuonata\Evento,NotaSuonata\Valore,NotaSuonata\Canale,#EseguiGliEventiMusicaliDallEditoreSequenza}
  5641.      NotaSuonata\Stato=True
  5642.     Case "Program"
  5643.      EventoMusicale()\Evento=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5644.      EventoMusicale()\Durata=2
  5645.     Case "Control"
  5646.      EventoMusicale()\Evento=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5647.      EventoMusicale()\Durata=2
  5648.      EventoMusicale()\Valore=ValoreEventoBase
  5649.     Case "PolyAftertouch"
  5650.      EventoMusicale()\Evento=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5651.      EventoMusicale()\Durata=2
  5652.     Case "MonoAftertouch"
  5653.      EventoMusicale()\Evento=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5654.      EventoMusicale()\Durata=2
  5655.     Case "PitchBend"
  5656.      EventoMusicale()\Evento=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5657.      EventoMusicale()\Durata=2
  5658.     Case "Tempo"
  5659.      EventoMusicale()\Evento=127-YTopo*1.0*127/(AreaVisibileDeiValori-1)
  5660.      EventoMusicale()\Durata=2
  5661.     Case "BPM"
  5662.      EventoMusicale()\Evento=97-YTopo*1.0*97/(AreaVisibileDeiValori-1)
  5663.      If EventoMusicale()\Evento=97 Then EventoMusicale()\Valore=0
  5664.      If EventoMusicale()\Evento=0 Then EventoMusicale()\Valore=1
  5665.      EventoMusicale()\Durata=2
  5666.     End Select
  5667.     DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+Max(EventoMusicale()\Durata,LarghezzaEventoBase))
  5668.    Else
  5669.     EZRequest "AmySequencer message","You have used all the available events","OK"
  5670.    EndIf
  5671.   Else
  5672.    EZRequest "AmySequencer message","You must select a channel first","OK"
  5673.   EndIf
  5674.  EndIf
  5675.  If Modo=#IncollaGliEventiMusicali
  5676.   If CanaleSelezionato>0
  5677.    ResetList EventoMusicale()
  5678.    While NextItem(EventoMusicale())=True
  5679.     SequenzaEvento=EventoMusicale()\Sequenza
  5680.     If SequenzaEvento=SequenzaSelezionata
  5681.      TipoDiEventoMusicale$=EventoMusicale()\Tipo
  5682.      If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  5683.       CanaleEvento=EventoMusicale()\Canale
  5684.       If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  5685.        EventoMusicaleCopiato=EventoMusicale()\Stato & #EventoMusicaleCopiato
  5686.        If EventoMusicaleCopiato=#EventoMusicaleCopiato
  5687.         EventoMusicale=EventoMusicale()\Evento
  5688.         ValoreEvento.b=EventoMusicale()\Valore
  5689.         InizioEvento=EventoMusicale()\Inizio
  5690.         DurataEvento.l=EventoMusicale()\Durata
  5691.         If DifferenzaPosizioneEventoMusicale.l=0 Then DifferenzaPosizioneEventoMusicale=PuntoDInserimento-InizioEvento
  5692.         PushItem EventoMusicale()
  5693.         LastItem EventoMusicale()
  5694.         If AddItem(EventoMusicale())=True
  5695.          EventiMusicali+1
  5696.          EventiMusicaliSelezionati+1
  5697.          EventoMusicale()\Tipo=TipoDiEventoMusicale$
  5698.          EventoMusicale()\Evento=EventoMusicale
  5699.          EventoMusicale()\Valore=ValoreEvento
  5700.          EventoMusicale()\Inizio=InizioEvento+DifferenzaPosizioneEventoMusicale
  5701.          EventoMusicale()\Durata=DurataEvento
  5702.          EventoMusicale()\Canale=CanaleEvento
  5703.          EventoMusicale()\Sequenza=SequenzaSelezionata
  5704.          EventoMusicale()\Stato=#EventoMusicaleSelezionato
  5705.          DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+Max(EventoMusicale()\Durata,LarghezzaEventoBase))
  5706.         Else
  5707.          EZRequest "AmySequencer message","You have used all the available events","OK"
  5708.          PopItem EventoMusicale()
  5709.          Pop If:Pop If:Pop If:Pop If:Pop If:Pop While:Goto FineCicloWhileIncollaturaEventiMusicali
  5710.         EndIf
  5711.         PopItem EventoMusicale()
  5712.        EndIf
  5713.       EndIf
  5714.      EndIf
  5715.     EndIf
  5716.    Wend
  5717. FineCicloWhileIncollaturaEventiMusicali
  5718.   Else
  5719.    EZRequest "AmySequencer message","You must select a channel first","OK"
  5720.   EndIf
  5721.  EndIf
  5722.  If Modo=#DimenticaGliEventiMusicaliTagliatiOCopiati
  5723.   If CanaleSelezionato>0
  5724.    ResetList EventoMusicale()
  5725.    While NextItem(EventoMusicale())=True
  5726.     SequenzaEvento=EventoMusicale()\Sequenza
  5727.     If SequenzaEvento=SequenzaSelezionata
  5728.      TipoDiEventoMusicale$=EventoMusicale()\Tipo
  5729.      If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  5730.       CanaleEvento=EventoMusicale()\Canale
  5731.       If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  5732.        EventoMusicaleTagliato=EventoMusicale()\Stato & #EventoMusicaleTagliato
  5733.        If EventoMusicaleTagliato=#EventoMusicaleTagliato
  5734.         EventoMusicale()\Stato & %11111001
  5735.        EndIf
  5736.        EventoMusicaleCopiato=EventoMusicale()\Stato & #EventoMusicaleCopiato
  5737.        If EventoMusicaleCopiato=#EventoMusicaleCopiato
  5738.         EventoMusicale()\Stato & %11111001
  5739.        EndIf
  5740.       EndIf
  5741.      EndIf
  5742.     EndIf
  5743.    Wend
  5744.   Else
  5745.    EZRequest "AmySequencer message","You must select a channel first","OK"
  5746.   EndIf
  5747.  EndIf
  5748.  If Modo=#SelezionaGliEventiMusicaliUguali
  5749.   ResetList EventoMusicale()
  5750.   While NextItem(EventoMusicale())=True
  5751.    If  EventoMusicale()\Canale=CanaleSelezionato AND EventoMusicale()\Sequenza=SequenzaSelezionata
  5752.     If EventoMusicale()\Tipo="PitchBend"
  5753.      If EventoMusicale()\Evento*128+EventoMusicale()\Valore=EventoMusicaleSelezionato
  5754.       If EventoMusicale()\Stato & #EventoMusicaleSelezionato=0
  5755.        EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5756.        EventiMusicaliSelezionati+1
  5757.       EndIf
  5758.      EndIf
  5759.     Else
  5760.      If EventoMusicale()\Evento=EventoMusicaleSelezionato
  5761.       If EventoMusicale()\Stato & #EventoMusicaleSelezionato=0
  5762.        EventoMusicale()\Stato | #EventoMusicaleSelezionato
  5763.        EventiMusicaliSelezionati+1
  5764.       EndIf
  5765.      EndIf
  5766.     EndIf
  5767.    EndIf
  5768.   Wend
  5769.  EndIf
  5770.  If NotaPiuLunga>0
  5771.   XMessaggio.w=#LarghezzaPulsantiEditoreSequenza
  5772.   YMessaggio.w=AltezzaInternaFinestraEditoreSequenza-8
  5773.   WLocate XMessaggio,YMessaggio
  5774.   WColour 3,0
  5775.   Print SPACE$(80-XMessaggio/8)
  5776.   WLocate XMessaggio,YMessaggio
  5777.   Print "Len>":ConvertiIlTempoInBattute{NotaPiuLunga,0}
  5778.  EndIf
  5779.  DurataSequenza=0
  5780.  ResetList EventoMusicale()
  5781.  While NextItem(EventoMusicale())=True
  5782.   If EventoMusicale()\Sequenza=SequenzaSelezionata
  5783.    DurataSequenza=Max(DurataSequenza,EventoMusicale()\Inizio+EventoMusicale()\Durata)
  5784.   EndIf
  5785.  Wend
  5786.  LimiteMassimoXInizioAreaVisibile.l=Max(DurataSequenza-(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali,0)
  5787.  XInizioAreaVisibile=Min(XInizioAreaVisibile,LimiteMassimoXInizioAreaVisibile)
  5788. End Statement
  5789.  
  5790. ;-------------------------------------------------------------------------
  5791. ;questa procedura gestisce il titolo della finestra dell'editore sequenza
  5792. ;this procedure handles the sequence editor window title
  5793. ;--------------------------------------------------------
  5794. Statement MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  5795. SHARED EventiMusicali
  5796. SHARED EventiMusicaliSelezionati
  5797. SHARED Sequenza()
  5798. SHARED SequenzaSelezionata
  5799.  TitoloFinestra$="Sequence "+Str$(SequenzaSelezionata)+":"
  5800.  NomeSequenza$=Sequenza()\Nome
  5801.  If NomeSequenza$="" Then NomeSequenza$="unnamed"
  5802.  TitoloFinestra$+NomeSequenza$+"-"
  5803.  If EventiMusicali>0
  5804.   TitoloFinestra$+Str$(EventiMusicaliSelezionati)+" selected event"
  5805.   If EventiMusicaliSelezionati<>1 Then TitoloFinestra$+"s"
  5806.   TitoloFinestra$+" of "+Str$(EventiMusicali)+" event"
  5807.   If EventiMusicali<>1 Then TitoloFinestra$+"s"
  5808.  Else
  5809.   TitoloFinestra$+"no events into this sequence"
  5810.  EndIf
  5811.  WTitle TitoloFinestra$
  5812. End Statement
  5813.  
  5814. ;----------------------------------------------
  5815. ;questa procedura registra gli eventi musicali
  5816. ;this procedure records the musical events
  5817. ;------------------------------------------
  5818. Statement RegistraGliEventiMusicali{Modo.b}
  5819. SHARED AltezzaInternaFinestraEditoreSequenza
  5820. SHARED Battiti
  5821. SHARED BattutePerMinuto
  5822. SHARED CanaleSelezionato
  5823. SHARED DurataSequenza
  5824. SHARED EventiMusicali
  5825. SHARED EventoMusicale()
  5826. SHARED LarghezzaInternaFinestraEditoreSequenza
  5827. SHARED Misure
  5828. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  5829. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  5830. SHARED ScalaEventiMusicali
  5831. SHARED Sequenza()
  5832. SHARED SequenzaNellaTraccia()
  5833. SHARED SequenzaSelezionata
  5834. SHARED Spazio$
  5835. SHARED TastoCursoreGiu$
  5836. SHARED TastoCursoreSu$
  5837. SHARED TastoFuga$
  5838. SHARED TipoDiEventoMusicaleDiBase$
  5839. SHARED XInizioAreaVisibile
  5840.  If SequenzaSelezionata>0
  5841.   Messaggio$="Begin recording?|If you'll choose|OK use CURSOR KEYS|UP & DOWN to change|BPM and press SPACE|to end recording"
  5842.   Registrazione.b=EZRequest("AmySequencer message",Messaggio$,"OK|Cancel")
  5843.   If Registrazione=0 Then Statement Return
  5844.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5845.    FineTempoVisibile.l=(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  5846.   EndIf
  5847.   Battito.b=Misure
  5848.   TicPerCinquantesimoDiSecondo.f=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  5849.   Tempo.l=0
  5850.   Repeat
  5851.  
  5852.    EventoRegistratoreEventiMusicali.l=Event
  5853.  
  5854.    Select EventoRegistratoreEventiMusicali
  5855.    Case #HaiChiusoLaFinestra
  5856.     FineRegistrazione.b=True
  5857.    Case #HaiAttivatoIlMenu
  5858.     If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5859.      If MenuHit=1 AND ItemHit=2 Then FineRegistrazione=True
  5860.     EndIf
  5861.    Case #HaiPremutoUnTasto
  5862.     TastoPremuto$=LCase$(Inkey$)
  5863.     Select TastoPremuto$
  5864.     Case TastoFuga$
  5865.      FineRegistrazione=True
  5866.     Case TastoCursoreSu$
  5867.      If BattutePerMinuto<300
  5868.       BattutePerMinuto+1
  5869.       TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  5870.       MostraLeBattutePerMinuto{BattutePerMinuto,10,Modo}
  5871.      EndIf
  5872.     Case TastoCursoreGiu$
  5873.      If BattutePerMinuto>10
  5874.       BattutePerMinuto-1
  5875.       TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  5876.       MostraLeBattutePerMinuto{BattutePerMinuto,10,Modo}
  5877.      EndIf
  5878.     Case Spazio$
  5879.      FineRegistrazione=True
  5880.     End Select
  5881.    End Select
  5882.    FlushEvents
  5883.  
  5884.    ByteDiStato.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5885.    TipoDiEventoMusicale.b=ByteDiStato & #_StatusBits
  5886.    CanaleEvento.b=ConvertiOltreCentoventisetteInNegativo{ByteDiStato & #_ChannelBits}+1
  5887.    Select TipoDiEventoMusicale
  5888.    Case #_NoteOn
  5889.     TipoDiEventoMusicale$="Note"
  5890.     Evento.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5891.     ValoreEvento.b=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5892.    Case #_NoteOff
  5893.     TipoDiEventoMusicale$="NoteOff"
  5894.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5895.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5896.    Case #_ProgramChange
  5897.     TipoDiEventoMusicale$="Program"
  5898.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5899.    Case #_ControlChange
  5900.     TipoDiEventoMusicale$="Control"
  5901.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5902.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5903.    Case #_PolyphonicKeyPressure
  5904.     TipoDiEventoMusicale$="PolyAftertouch"
  5905.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5906.    Case #_ChannelKeyPressure
  5907.     TipoDiEventoMusicale$="MonoAftertouch"
  5908.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5909.    Case #_PitchBend
  5910.     TipoDiEventoMusicale$="PitchBend"
  5911.     ValoreEvento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5912.     Evento=ConvertiOltreCentoventisetteInNegativo{ReadSerial(0)}
  5913.    Default
  5914.     TipoDiEventoMusicale$=""
  5915.    End Select
  5916.    If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  5917.     If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  5918.      If TipoDiEventoMusicale$<>"NoteOff"
  5919.       LastItem EventoMusicale()
  5920.       If AddItem(EventoMusicale())=True
  5921.        EventoMusicale()\Tipo=TipoDiEventoMusicale$
  5922.        EventoMusicale()\Evento=Evento
  5923.        EventoMusicale()\Inizio=Tempo
  5924.        EventoMusicale()\Canale=CanaleEvento
  5925.        EventoMusicale()\Sequenza=SequenzaSelezionata
  5926.        EventoMusicale()\Durata=2
  5927.        If TipoDiEventoMusicale$="Note" Then EventoMusicale()\Valore=ValoreEvento
  5928.        If TipoDiEventoMusicale$="Control" Then EventoMusicale()\Valore=ValoreEvento
  5929.        If TipoDiEventoMusicale$="PitchBend" Then EventoMusicale()\Valore=ValoreEvento
  5930.        Select TipoDiEventoMusicale$
  5931.        Case "Note"
  5932.         Nota.b=EventoMusicale()\Evento
  5933.         SuonaLaNota{Nota,ValoreEvento,CanaleEvento,Modo}
  5934.        Case "Program"
  5935.         Programma.b=EventoMusicale()\Evento
  5936.         EseguiIlCambioDiProgramma{Programma,CanaleEvento,Modo}
  5937.        Case "Control"
  5938.         Controllo.b=EventoMusicale()\Evento:ValoreEvento=EventoMusicale()\Valore
  5939.         EseguiIlCambioDiControllo{Controllo,ValoreEvento,CanaleEvento,Modo}
  5940.        Case "PolyAftertouch"
  5941.         PressioneMultipla.b=EventoMusicale()\Evento
  5942.         EseguiLaPressioneMultipla{PressioneMultipla,CanaleEvento,Modo}
  5943.        Case "MonoAftertouch"
  5944.         PressioneSingola.b=EventoMusicale()\Evento
  5945.         EseguiLaPressioneSingola{PressioneSingola,CanaleEvento,Modo}
  5946.        Case "PitchBend"
  5947.         CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  5948.         EseguiLaCurvaDiPicco{CurvaDiPicco,CanaleEvento,Modo}
  5949.        End Select
  5950.        EventoMusicale()\Stato | #EventoMusicaleEseguito
  5951.        If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5952.         Sequenza()\EventiMusicali+1
  5953.        EndIf
  5954.        If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5955.         EventiMusicali+1:MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  5956.        EndIf
  5957.       Else
  5958.        EZRequest "AmySequencer message","You have used all the available events","OK"
  5959.        Statement Return
  5960.       EndIf
  5961.      Else
  5962.       SmettiDiSuonareLaNota{Evento,ValoreEvento,CanaleEvento,Modo}
  5963.       EventoMusicale()\Stato & %11110111
  5964.       EventoMusicale()\Stato | #EventoMusicaleTerminato
  5965.      EndIf
  5966.     EndIf
  5967.    EndIf
  5968.    VWait
  5969.    Tempo+TicPerCinquantesimoDiSecondo
  5970.    If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  5971.     Sequenza()\Durata=Tempo-SequenzaNellaTraccia()\Inizio+1
  5972.    EndIf
  5973.    If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  5974.     If Tempo-XInizioAreaVisibile>FineTempoVisibile
  5975.      XInizioAreaVisibile=Tempo
  5976.      MostraLeNoteDiSfondoConILoroNomi{}
  5977.      MostraLeBattute{}
  5978.      MostraSliderEditoreSequenza{}
  5979.     EndIf
  5980.     Sequenza()\Durata=Tempo+1
  5981.     DurataSequenza=Tempo+1
  5982.    EndIf
  5983.    TempoMetronomo.w+TicPerCinquantesimoDiSecondo
  5984.    If TempoMetronomo>=(#TicDiBasePerQuarto*1.0*Battiti)/Misure
  5985.     If NotaMetronomoSuonata.b=True
  5986.      SmettiDiSuonareLaNota{76,0,10,Modo}
  5987.      TempoMetronomo=0
  5988.      NotaMetronomoSuonata=False
  5989.     Else
  5990.      SuonaLaNota{76,(127.0*Battito)/Misure,10,Modo}
  5991.      Battito-1:If Battito=0 Then Battito=Misure
  5992.      NotaMetronomoSuonata=True
  5993.     EndIf
  5994.    EndIf
  5995.    ResetList EventoMusicale()
  5996.    While NextItem(EventoMusicale())=True
  5997.     TipoDiEventoMusicale$=EventoMusicale()\Tipo
  5998.     Evento=EventoMusicale()\Evento
  5999.     ValoreEvento=EventoMusicale()\Valore
  6000.     InizioEvento.l=EventoMusicale()\Inizio
  6001.     DurataEvento.l=EventoMusicale()\Durata
  6002.     CanaleEvento=EventoMusicale()\Canale
  6003.     StatoEvento.b=EventoMusicale()\Stato
  6004.     EventoMusicaleEseguito.b=StatoEvento & #EventoMusicaleEseguito
  6005.     If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  6006.      If CanaleEvento=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  6007.       If EventoMusicaleEseguito=#EventoMusicaleEseguito
  6008.        If TipoDiEventoMusicale$="Note" Then EventoMusicale()\Durata=Tempo-InizioEvento+1
  6009.        If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  6010.         If TipoDiEventoMusicale$="PitchBend"
  6011.          CurvaDiPicco.w=Evento*128+ValoreEvento
  6012.       DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  6013.         Else
  6014.          DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  6015.         EndIf
  6016.        EndIf
  6017.        If InizioEvento+DurataEvento-1>=Tempo
  6018.         EventoMusicale()\Stato & %11110111
  6019.         EventoMusicale()\Stato | #EventoMusicaleTerminato
  6020.        EndIf
  6021.       EndIf
  6022.       EventoMusicaleTerminato.b=StatoEvento & #EventoMusicaleTerminato
  6023.       If EventoMusicaleTerminato=#EventoMusicaleTerminato
  6024.        If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  6025.         If TipoDiEventoMusicale$="PitchBend"
  6026.          CurvaDiPicco=Evento*128+ValoreEvento
  6027.          DisegnaUnEventoMusicale{TipoDiEventoMusicale$,CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,StatoEvento}
  6028.         Else
  6029.          DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,StatoEvento}
  6030.         EndIf
  6031.        EndIf
  6032.        EventoMusicale()\Stato & %11101111
  6033.       EndIf
  6034.      EndIf
  6035.     EndIf
  6036.    Wend
  6037.   Until FineRegistrazione=True
  6038.   If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  6039.    Sequenza()\Durata=Tempo-SequenzaNellaTraccia()\Inizio+1
  6040.   EndIf
  6041.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  6042.    DurataSequenza=Tempo+1
  6043.   EndIf
  6044.   ResetList EventoMusicale()
  6045.   While NextItem(EventoMusicale())=True
  6046.    EventoMusicale()\Stato & %11100111
  6047.   Wend
  6048.  Else
  6049.   EZRequest "AmySequencer message","You must select a sequence first","OK"
  6050.  EndIf
  6051. End Statement
  6052.  
  6053. ;-----------------------------------------------
  6054. ;questa procedura mostra il punto d'inserimento
  6055. ;this procedure shows the insertion point
  6056. ;-----------------------------------------
  6057. Statement MostraIlPuntoDInserimento{}
  6058. SHARED AltezzaInternaFinestraEditoreSequenza
  6059. SHARED CanaleSelezionato
  6060. SHARED LarghezzaInternaFinestraEditoreSequenza
  6061. SHARED PuntoDInserimento
  6062. SHARED ScalaEventiMusicali
  6063. SHARED XInizioAreaVisibile
  6064.  I.w=16+(PuntoDInserimento-XInizioAreaVisibile)/ScalaEventiMusicali
  6065.  If I>=16 AND I+7<LarghezzaInternaFinestraEditoreSequenza
  6066.   If CanaleSelezionato>0
  6067.    ColoreTestoPuntoDInserimento=CanaleSelezionato-1
  6068.    ColoreSfondoPuntoDInserimento=16-CanaleSelezionato
  6069.   Else
  6070.    ColoreTestoPuntoDInserimento=3
  6071.   EndIf
  6072.   WBox I,0,I+7,AltezzaInternaFinestraEditoreSequenza-8-8,ColoreSfondoPuntoDInserimento
  6073.   TestoPuntoDInserimento$="Insertion point>"
  6074.   For TestoPuntoDInserimento.b=0 To 15
  6075.    WLocate I,TestoPuntoDInserimento*8
  6076.    WColour ColoreTestoPuntoDInserimento,ColoreSfondoPuntoDInserimento
  6077.    Print Mid$(TestoPuntoDInserimento$,TestoPuntoDInserimento+1,1)
  6078.   Next TestoPuntoDInserimento
  6079.  EndIf
  6080. End Statement
  6081.  
  6082. ;-------------------------------------------------------------------
  6083. ;questa procedura mostra il pulsante del canale selezionato da solo
  6084. ;this procedure shows the button of the selected channel alone
  6085. ;--------------------------------------------------------------
  6086. Statement MostraPulsanteSelezioneSoloEventiMusicaliDelCanaleSelezionato{}
  6087. SHARED AltezzaInternaFinestraEditoreSequenza
  6088. SHARED CanaleSelezionato
  6089. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  6090.  If CanaleSelezionato>0
  6091.   If MostraSoloGliEventiMusicaliDelCanaleSelezionato=True Then WColour 3,2 Else WColour 2,1
  6092.  Else
  6093.   WColour 1,0
  6094.  EndIf
  6095.  WLocate 16*16,AltezzaInternaFinestraEditoreSequenza-8:Print "Alone"
  6096. End Statement
  6097.  
  6098. ;--------------------------------------------
  6099. ;questa procedura esegue gli eventi musicali
  6100. ;this procedure executes the musical events
  6101. ;-------------------------------------------
  6102. Statement EseguiGliEventiMusicali{Modo.b}
  6103. SHARED AltezzaInternaFinestraEditoreSequenza
  6104. SHARED BattutePerMinuto
  6105. SHARED CanaleSelezionato
  6106. SHARED DurataSequenza
  6107. SHARED EventoMusicale()
  6108. SHARED FineMotivo
  6109. SHARED LarghezzaInternaFinestraEditoreSequenza
  6110. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  6111. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  6112. SHARED ScalaEventiMusicali
  6113. SHARED Sequenza()
  6114. SHARED SequenzaNellaTraccia()
  6115. SHARED SequenzaSelezionata
  6116. SHARED Spazio$
  6117. SHARED TastoFuga$
  6118. SHARED TipoDiEventoMusicaleDiBase$
  6119. SHARED XInizioAreaVisibile
  6120.  TicPerCinquantesimoDiSecondo.f=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  6121.  Tempo.l=0
  6122.  If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  6123.   FineEsecuzione.l=FineMotivo
  6124.  EndIf
  6125.  If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  6126.   FineEsecuzione=DurataSequenza
  6127.   FineTempoVisibile.l=(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  6128.  EndIf
  6129.  Repeat
  6130.   ResetList EventoMusicale()
  6131.   While NextItem(EventoMusicale())=True
  6132.    SequenzaEventoMusicale.l=EventoMusicale()\Sequenza
  6133.    If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  6134.     ResetList Sequenza()
  6135.     SequenzaCorrente.l=0
  6136.     While NextItem(Sequenza())=True
  6137.      SequenzaCorrente+1
  6138.      If SequenzaCorrente=SequenzaEventoMusicale
  6139.       ResetList SequenzaNellaTraccia()
  6140.       While NextItem(SequenzaNellaTraccia())=True
  6141.        If SequenzaNellaTraccia()\Sequenza=SequenzaCorrente AND InizioSequenzaNellaTraccia.l>=Tempo
  6142.         InizioSequenzaNellaTraccia=Min(InizioSequenzaNellaTraccia,SequenzaNellaTraccia()\Inizio)
  6143.        EndIf
  6144.       Wend
  6145.       Pop If:Pop While:Goto FineCicloRicercaSequenzaDaSuonare
  6146.      EndIf
  6147.     Wend
  6148.    EndIf
  6149. FineCicloRicercaSequenzaDaSuonare
  6150.    If SequenzaEventoMusicale=SequenzaSelezionata OR Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  6151.     If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  6152.      InizioEventoMusicale.l=InizioSequenzaNellaTraccia+EventoMusicale()\Inizio
  6153.     EndIf
  6154.     If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  6155.      InizioEventoMusicale=EventoMusicale()\Inizio
  6156.     EndIf
  6157.     TipoDiEventoMusicale$=EventoMusicale()\Tipo
  6158.     DurataEventoMusicale.l=EventoMusicale()\Durata
  6159.     FineEventoMusicale.l=InizioEventoMusicale+DurataEventoMusicale-1
  6160.     ValoreEventoMusicale.b=EventoMusicale()\Valore
  6161.     CanaleEventoMusicale.b=EventoMusicale()\Canale
  6162.     EventoMusicaleEseguito.b=EventoMusicale()\Stato & #EventoMusicaleEseguito
  6163.     EventoMusicaleTerminato.b=EventoMusicale()\Stato & #EventoMusicaleTerminato
  6164.     If TipoDiEventoMusicale$=TipoDiEventoMusicaleDiBase$ OR MostraSoloGliEventiMusicaliDelloStessoTipo=False
  6165.      If CanaleEventoMusicale=CanaleSelezionato OR MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  6166.       If EventoMusicaleEseguito=0 AND EventoMusicaleTerminato=0 AND InizioEventoMusicale.l<=Tempo
  6167.        If TipoDiEventoMusicale$<>""
  6168.         Select TipoDiEventoMusicale$
  6169.         Case "Note"
  6170.          Nota.b=EventoMusicale()\Evento
  6171.          VelocitaNota.b=ValoreEventoMusicale
  6172.          SuonaLaNota{Nota,VelocitaNota,CanaleEventoMusicale,Modo}
  6173.         Case "Program"
  6174.          Programma.b=EventoMusicale()\Evento
  6175.          EseguiIlCambioDiProgramma{Programma,CanaleEventoMusicale,Modo}
  6176.         Case "Control"
  6177.          Controllo.b=EventoMusicale()\Evento
  6178.          ValoreConttrollo.b=ValoreEventoMusicale
  6179.          EseguiIlCambioDiControllo{Controllo,ValoreControllo,CanaleEventoMusicale,Modo}
  6180.         Case "PolyAftertouch"
  6181.          PressioneMultipla.b=EventoMusicale()\Evento
  6182.          EseguiLaPressioneMultipla{PressionMultipla,CanaleEventoMusicale,Modo}
  6183.         Case "MonoAftertouch"
  6184.          PressioneSingola.b=EventoMusicale()\Evento
  6185.          EseguiLaPressioneSingola{PressioneSingola,CanaleEventoMusicale,Modo}
  6186.         Case "PitchBend"
  6187.          CurvaDiPicco.w=EventoMusicale()\Evento*128+EventoMusicale()\Valore
  6188.          EseguiLaCurvaDiPicco{CurvaDiPicco,CanaleEventoMusicale,Modo}
  6189.         Case "Tempo"
  6190.          NuovoTempo.b=EventoMusicale()\Evento
  6191.          MostraIlTempo{NuovoTempo,CanaleEventoMusicale,Modo}
  6192.         Case "BPM"
  6193.          NuoveBattutePerMinuto.w=9+EventoMusicale()\Evento*3+EventoMusicale()\Valore
  6194.          TicPerCinquantesimoDiSecondo=(NuoveBattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  6195.          MostraLeBattutePerMinuto{NuoveBattutePerMinuto,CanaleEventoMusicale,Modo}
  6196.         End Select
  6197.         If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  6198.          Evento.b=EventoMusicale()\Evento
  6199.          ValoreEvento.b=ValoreEventoMusicale
  6200.          InizioEvento.l=InizioEventoMusicale
  6201.          DurataEvento.l=DurataEventoMusicale
  6202.          CanaleEvento.b=CanaleEventoMusicale
  6203.          If TipoDiEventoMusicale$="PitchBend"
  6204.           DisegnaUnEventoMusicale{"PitchBend",CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  6205.          Else
  6206.           If TipoDiEventoMusicale$="BPM"
  6207.            DisegnaUnEventoMusicale{"BPM",9+Evento*3+ValoreEvento,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  6208.           Else
  6209.            DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,#EventoMusicaleEseguito}
  6210.           EndIf
  6211.          EndIf
  6212.         EndIf
  6213.         EventoMusicale()\Stato | #EventoMusicaleEseguito
  6214.        EndIf
  6215.       EndIf
  6216.       If EventoMusicaleEseguito=#EventoMusicaleEseguito AND EventoMusicaleTerminato=0 AND FineEventoMusicale<=Tempo
  6217.        If TipoDiEventoMusicale$<>""
  6218.         If TipoDiEventoMusicale$="Note"
  6219.          Nota=EventoMusicale()\Evento
  6220.          VelocitaNota=ValoreEventoMusicale
  6221.          SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleEventoMusicale,Modo}
  6222.         EndIf
  6223.         If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  6224.          Evento=EventoMusicale()\Evento
  6225.          ValoreEvento=ValoreEventoMusicale
  6226.          InizioEvento=InizioEventoMusicale
  6227.          DurataEvento=DurataEventoMusicale
  6228.          CanaleEvento=CanaleEventoMusicale
  6229.          StatoOriginaleEvento.b=EventoMusicale()\Stato & %11110111
  6230.          If TipoDiEventoMusicale$="PitchBend"
  6231.           DisegnaUnEventoMusicale{"PitchBend",CurvaDiPicco,InizioEvento,DurataEvento,CanaleEvento,StatoOriginaleEvento}
  6232.          Else
  6233.           If TipoDiEventoMusicale$="BPM"
  6234.            DisegnaUnEventoMusicale{"BPM",9+Evento*3+ValoreEvento,InizioEvento,DurataEvento,CanaleEvento,StatoOriginaleEvento}
  6235.           Else
  6236.            DisegnaUnEventoMusicale{TipoDiEventoMusicale$,Evento,InizioEvento,DurataEvento,CanaleEvento,StatoOriginaleEvento}
  6237.           EndIf
  6238.          EndIf
  6239.         EndIf
  6240.         EventoMusicale()\Stato | #EventoMusicaleTerminato
  6241.        EndIf
  6242.       EndIf
  6243.      EndIf
  6244.     EndIf
  6245.    EndIf
  6246.   Wend
  6247.  
  6248.   VWait
  6249.  
  6250.   Tempo+TicPerCinquantesimoDiSecondo
  6251.  
  6252.   If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale
  6253.    WJam #DueColoriConSfondoPieno
  6254.    WLocate 0,0:WColour 0,0:Print SPACE$(80)
  6255.    WLocate 0,0:WColour 3:Print "Playing song, now at ":ConvertiIlTempoInBattute{Tempo,1}:Print "..."
  6256.    WJam #UnColoreConSfondoTrasparente
  6257.   EndIf
  6258.  
  6259.   If Modo=#EseguiGliEventiMusicaliDallEditoreSequenza
  6260.    If Tempo-XInizioAreaVisibile>FineTempoVisibile
  6261.     XInizioAreaVisibile=Tempo
  6262.     MostraLeNoteDiSfondoConILoroNomi{}
  6263.     MostraLeBattute{}
  6264.     MostraGliEventiMusicali{}
  6265.     MostraSliderEditoreSequenza{}
  6266.    EndIf
  6267.   EndIf
  6268.  
  6269.   EventoEsecutoreEventiMusicali.l=Event
  6270.  
  6271.   Select EventoEsecutoreEventiMusicali
  6272.   Case #HaiChiusoLaFinestra
  6273.    Pop Select:Pop Repeat:Goto FineCicloEsecuzioneEventiMusicali
  6274.   Case #HaiAttivatoIlMenu
  6275.    Select Modo
  6276.    Case #EseguiGliEventiMusicaliDallaFinestraPrincipale
  6277.     If MenuHit=1 AND ItemHit=2 Then Pop Select:Pop Select:Pop Repeat:Goto FineCicloEsecuzioneEventiMusicali
  6278.    Case #EseguiGliEventiMusicaliDallEditoreSequenza
  6279.     If MenuHit=0 AND ItemHit=2 Then Pop Select:Pop Select:Pop Repeat:Goto FineCicloEsecuzioneEventiMusicali
  6280.    End Select
  6281.   Case #HaiRilasciatoUnBottone
  6282.    If Modo=#EseguiGliEventiMusicaliDallaFinestraPrincipale AND GadgetHit=1
  6283.     LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  6284.     BattutePerMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  6285.     TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  6286.     MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  6287.    EndIf
  6288.   Case #HaiPremutoUnTasto
  6289.    TastoPremuto$=LCase$(Inkey$)
  6290.    Select TastoPremuto$
  6291.    Case TastoFuga$
  6292.     Pop Select:Pop Select:Pop Repeat:Goto FineCicloEsecuzioneEventiMusicali
  6293.    Case Spazio$
  6294.     Pop Select:Pop Select:Pop Repeat:Goto FineCicloEsecuzioneEventiMusicali
  6295.    End Select
  6296.   End Select
  6297.   FlushEvents
  6298.  Until Tempo>=FineEsecuzione
  6299.  
  6300. FineCicloEsecuzioneEventiMusicali
  6301.  
  6302.  ResetList EventoMusicale()
  6303.  While NextItem(EventoMusicale())=True
  6304.   EventoMusicaleEseguito.b=EventoMusicale()\Stato & #EventoMusicaleEseguito
  6305.   If EventoMusicaleEseguito=#EventoMusicaleEseguito
  6306.    If EventoMusicale()\Tipo="Note"
  6307.     Nota=EventoMusicale()\Evento
  6308.     VelocitaNota=EventoMusicale()\Valore
  6309.     CanaleNota.b=EventoMusicale()\Canale
  6310.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,Modo}
  6311.    EndIf
  6312.    EventoMusicale()\Stato & %11100111
  6313.   EndIf
  6314.  Wend
  6315.  Quiet %1111
  6316. End Statement
  6317.  
  6318. ;-------------------------------------------------------------
  6319. ;questa procedura permette di editare la sequenza selezionata
  6320. ;this procedure permits to edit the selected sequence
  6321. ;-----------------------------------------------------
  6322. Statement EditoreSequenza{}
  6323. SHARED AltezzaFonte
  6324. SHARED AltezzaInternaFinestraEditoreSequenza
  6325. SHARED AltezzaSchermo
  6326. SHARED AreaInvisibileDelleNote
  6327. SHARED AreaInvisibileDelTempo
  6328. SHARED AreaVisibileDeiValori
  6329. SHARED Battiti
  6330. SHARED CanaleSelezionato
  6331. SHARED ColoriOriginali
  6332. SHARED DurataSequenza
  6333. SHARED EventiMusicali
  6334. SHARED EventiMusicaliSelezionati
  6335. SHARED EventoMusicale()
  6336. SHARED LarghezzaInternaFinestraEditoreSequenza
  6337. SHARED LarghezzaEventoBase
  6338. SHARED LarghezzaSchermo
  6339. SHARED MIDIAttivato
  6340. SHARED Misure
  6341. SHARED MostraSoloGliEventiMusicaliDelloStessoTipo
  6342. SHARED MostraSoloGliEventiMusicaliDelCanaleSelezionato
  6343. SHARED MostraNuovoValore
  6344. SHARED NotaSuonata
  6345. SHARED NoteSuonate
  6346. SHARED OttavaSelezionata
  6347. SHARED PeriFreq()
  6348. SHARED PrimaVoltaNellEditoreSequenza
  6349. SHARED PuntoDInserimento
  6350. SHARED ScalaEventiMusicali
  6351. SHARED Sequenza()
  6352. SHARED SequenzaNellaTraccia()
  6353. SHARED Spazio$
  6354. SHARED TastoDelTopoCliccato
  6355. SHARED TastoBackspace$
  6356. SHARED TastoCursoreDestra$
  6357. SHARED TastoCursoreGiu$
  6358. SHARED TastoCursoreSinistra$
  6359. SHARED TastoCursoreSu$
  6360. SHARED TastoFuga$
  6361. SHARED TicPerCinquantesimoDiSecondo
  6362. SHARED TipoDiEventoMusicaleDiBase$
  6363. SHARED TipoDiNota()
  6364. SHARED XInizioAreaVisibile
  6365. SHARED XLunSlider
  6366. SHARED XTopo
  6367. SHARED YInizioAreaVisibile
  6368. SHARED YLunSlider
  6369. SHARED YTopo
  6370.  
  6371. ;-----------------------------------------------------------------------
  6372. ;imposta il colore del testo nei menu' a quello piu' chiaro disponibile
  6373. ;sets text menu colour to the brightest available
  6374. ;-------------------------------------------------
  6375.  MenuColour 3
  6376.  
  6377.  XPosF.w=0:YPosF.w=AltezzaFonte+3:XLunF.w=LarghezzaSchermo:YLunF.w=AltezzaSchermo-(AltezzaFonte+3)
  6378.  TipoFinestra.l=#BottoneNascondiFinestra+#BottoneChiudiFinestra+#FinestraConMemoriaSfondo+#FinestraAttivata
  6379.  DurataSequenza=Max(Sequenza()\Durata,(#TicDiBasePerQuarto*4.0*Battiti)/Misure)
  6380.  EventiMusicali=Sequenza()\EventiMusicali
  6381.  EventiMusicaliSelezionati=Sequenza()\EventiMusicaliSelezionati
  6382.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1
  6383.  MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  6384.  LarghezzaInternaFinestraEditoreSequenza=InnerWidth
  6385.  AltezzaInternaFinestraEditoreSequenza=InnerHeight
  6386.  CloseWindow #FinestraEditoreSequenza
  6387.  
  6388.  AreaInvisibileDelleNote.b=128-(AltezzaInternaFinestraEditoreSequenza-8-8)/8
  6389.  
  6390.  AreaVisibileDeiValori=(128-AreaInvisibileDelleNote)*8-7
  6391.  
  6392.  XLunSlider=16
  6393.  YLunSlider=AltezzaInternaFinestraEditoreSequenza-8-8
  6394.  ImpostaSlider{1,0,0,"VERTICAL",0,#ListaGadgetEditoreSequenza}
  6395.  
  6396.  XLunSlider=LarghezzaInternaFinestraEditoreSequenza-16
  6397.  YLunSlider=8
  6398.  ImpostaSlider{2,16,AltezzaInternaFinestraEditoreSequenza-8-8,"HORIZONTAL",0,#ListaGadgetEditoreSequenza}
  6399.  
  6400.  Window #FinestraEditoreSequenza,XPosF,YPosF,XLunF,YLunF,TipoFinestra,"",-1,-1,#ListaGadgetEditoreSequenza
  6401.  MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  6402.  
  6403. ;----------------------------------------------
  6404. ;imposta la fonte di caratteri per la finestra
  6405. ;sets the font for the window
  6406. ;-----------------------------
  6407.  WindowFont #FonteDiCaratteriTopaz8
  6408.  
  6409.  WJam #DueColoriConSfondoPieno
  6410.  
  6411.  SetZone 0,0,0,LarghezzaInternaFinestraEditoreSequenza-1,AltezzaInternaFinestraEditoreSequenza-1-8-8
  6412.  
  6413.  MostraLaScalaDegliEventiMusicali{False}
  6414.  SetZone 1,0,AltezzaInternaFinestraEditoreSequenza-8-8,7,AltezzaInternaFinestraEditoreSequenza-8-8+7
  6415.  SetZone 2,8,AltezzaInternaFinestraEditoreSequenza-8-8,15,AltezzaInternaFinestraEditoreSequenza-8-8+7
  6416.  
  6417.  Format "00"
  6418.  For Canale.b=1 To 16
  6419.   X0Canale.w=(Canale-1)*16:Y0Canale.w=AltezzaInternaFinestraEditoreSequenza-8
  6420.   WLocate X0Canale,Y0Canale
  6421.   If Canale=CanaleSelezionato
  6422.    WColour Canale-1,16-Canale
  6423.   Else
  6424.    If ColoriOriginali=True
  6425.     WColour Canale MOD 2+1,Canale MOD 2
  6426.    Else
  6427.     WColour 10+(Canale MOD 2)*2,9+(Canale MOD 2)*2
  6428.    EndIf
  6429.   EndIf
  6430.   Print Canale
  6431.   SetZone Canale+2,X0Canale,Y0Canale,X0Canale+15,Y0Canale+7
  6432.  Next Canale
  6433.  Format ""
  6434.  SetZone Canale+2,X0Canale+16,Y0Canale,#LarghezzaPulsantiEditoreSequenza-1,Y0Canale+7
  6435.  MostraPulsanteSelezioneSoloEventiMusicaliDelCanaleSelezionato{}
  6436.  WLocate X0Canale+16,Y0Canale:Print "Alone"
  6437. ; WLocate X0Canale+16,Y0Canale
  6438. ; If ColoriOriginali=True Then WColour 2,1 Else WColour 14,13
  6439. ; Print "All":SetZone 19,X0Canale+16,Y0Canale,X0Canale+16+23,Y0Canale+7
  6440. ; WLocate X0Canale+16+8*3,Y0Canale
  6441. ; If ColoriOriginali=True Then WColour 1,0 Else WColour 15,14
  6442. ; Print "None":SetZone 20,X0Canale+16+8*3,Y0Canale,X0Canale+16+8*3+8*4-1,Y0Canale+7
  6443. ; WLocate X0Canale+16+8*3+8*4,Y0Canale
  6444. ; If ColoriOriginali=True Then WColour 2,1 Else WColour 14,13
  6445. ; Print "Toggle":SetZone 21,X0Canale+16+8*3+8*4,Y0Canale,X0Canale+16+8*3+8*4+8*6-1,Y0Canale+7
  6446.  If PrimaVoltaNellEditoreSequenza=True
  6447.  
  6448. ;--------------------------------------------------------------------------
  6449. ;questa variabile indica la nota d'inizio delle note nell'editore sequenza
  6450. ;this variable states the beginning note in the sequence editor
  6451. ;---------------------------------------------------------------
  6452.   YInizioAreaVisibile=127-(127-AreaInvisibileDelleNote)-#_MiddleC
  6453.  EndIf
  6454.  
  6455.  Repeat
  6456.   If SecondoClicDelTopo.b=False
  6457.    AreaInvisibileDelTempo=DurataSequenza-(LarghezzaInternaFinestraEditoreSequenza-16)*ScalaEventiMusicali
  6458.    AreaInvisibileDelTempo=Max(AreaInvisibileDelTempo,0)
  6459.    MostraSliderEditoreSequenza{}
  6460.    ImpostaMenuEditoreSequenza{}
  6461.    MostraIlTitoloDellaFinestraDellEditoreSequenza{}
  6462.    MostraLeNoteDiSfondoConILoroNomi{}
  6463.    MostraLeBattute{}
  6464.    MostraGliEventiMusicali{}
  6465.    MostraIlPuntoDInserimento{}
  6466.    MostraPulsanteSelezioneSoloEventiMusicaliDelCanaleSelezionato{}
  6467.    SecondoClicDelTopo=True
  6468.   EndIf
  6469.   If PrimaVoltaNellEditoreSequenza=True
  6470.    MostraITastiDaUsare{}
  6471.    MostraLaMappaturaDelleNoteSullaTastiera{}
  6472.    PrimaVoltaNellEditoreSequenza=False
  6473.   EndIf
  6474.   If NotaSuonata\Stato=True
  6475.    Nota.b=NotaSuonata\Evento:FineNota.l=NotaSuonata\Durata-1
  6476.    VelocitaNota.b=NotaSuonata\Valore:CanaleNota.b=NotaSuonata\Canale
  6477.    DurataNota.l=(Timer-TempoTrascorso.l)*TicPerCinquantesimoDiSecondo
  6478.    If DurataNota>FineNota
  6479.     SmettiDiSuonareLaNota{Nota,VelocitaNota,CanaleNota,#EseguiGliEventiMusicaliDallEditoreSequenza}
  6480.     NotaSuonata\Stato=False
  6481.    EndIf
  6482.   EndIf
  6483.   If NoteSuonate>0 AND NotaSuonata\Stato=False
  6484.    If NoteSuonate=1 Then Messaggio$="There is a note" Else Messaggio$="There are "+Str$(NoteSuonate)+" notes"
  6485.    Messaggio$+" still playing:|clicking on OK you will stop "
  6486.    If NoteSuonate=1 Then Messaggio$+"this." Else Messaggio$+"these."
  6487.    EZRequest "AmySequencer message",Messaggio$,"OK"
  6488.    InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallEditoreSequenza}
  6489.    NoteSuonate=0
  6490.   EndIf
  6491.  
  6492.   EventoFinestraEditoreSequenza.l=Event
  6493.  
  6494.   Select EventoFinestraEditoreSequenza
  6495.   Case #HaiPremutoUnTastoDelTopo
  6496.    XTopo=WMouseX:YTopo=WMouseY:TastoDelTopoCliccato=MButtons
  6497.    ZonaTopo.b=Zone(XTopo,YTopo)
  6498.    Select TastoDelTopoCliccato
  6499.    Case #TastoSinistroDelTopoPremuto
  6500.     Select ZonaTopo
  6501.     Case 0
  6502.      Selezione{#SelezionaUnEventoMusicale}
  6503.     Case 1
  6504.      ScalaEventiMusicali/2:If ScalaEventiMusicali=0 Then ScalaEventiMusicali=64
  6505.      MostraLaScalaDegliEventiMusicali{True}
  6506.     Case 2
  6507.      ScalaEventiMusicali+ScalaEventiMusicali:If ScalaEventiMusicali=128 Then ScalaEventiMusicali=1
  6508.      MostraLaScalaDegliEventiMusicali{True}
  6509.     Case 3
  6510.      Format "00"
  6511.      If CanaleSelezionato>0
  6512.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6513.       If ColoriOriginali=True
  6514.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6515.       Else
  6516.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6517.       EndIf
  6518.       Print Str$(CanaleSelezionato)
  6519.      EndIf
  6520.      CanaleSelezionato=1:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6521.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6522.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6523.      Print Str$(CanaleSelezionato)
  6524.      Format ""
  6525.     Case 4
  6526.      Format "00"
  6527.      If CanaleSelezionato>0
  6528.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6529.       If ColoriOriginali=True
  6530.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6531.       Else
  6532.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6533.       EndIf
  6534.       Print Str$(CanaleSelezionato)
  6535.      EndIf
  6536.      CanaleSelezionato=2:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6537.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6538.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6539.      Print Str$(CanaleSelezionato)
  6540.      Format ""
  6541.     Case 5
  6542.      Format "00"
  6543.      If CanaleSelezionato>0
  6544.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6545.       If ColoriOriginali=True
  6546.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6547.       Else
  6548.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6549.       EndIf
  6550.       Print Str$(CanaleSelezionato)
  6551.      EndIf
  6552.      CanaleSelezionato=3:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6553.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6554.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6555.      Print Str$(CanaleSelezionato)
  6556.      Format ""
  6557.     Case 6
  6558.      Format "00"
  6559.      If CanaleSelezionato>0
  6560.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6561.       If ColoriOriginali=True
  6562.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6563.       Else
  6564.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6565.       EndIf
  6566.       Print Str$(CanaleSelezionato)
  6567.      EndIf
  6568.      CanaleSelezionato=4:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6569.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6570.      WColour CanaleSelezionato-1,16-CanaleSelezionato:Print Str$(CanaleSelezionato)
  6571.      Format ""
  6572.     Case 7
  6573.      Format "00"
  6574.      If CanaleSelezionato>0
  6575.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6576.       If ColoriOriginali=True
  6577.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6578.       Else
  6579.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6580.       EndIf
  6581.       Print Str$(CanaleSelezionato)
  6582.      EndIf
  6583.      CanaleSelezionato=5:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6584.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6585.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6586.      Print Str$(CanaleSelezionato)
  6587.      Format ""
  6588.     Case 8
  6589.      Format "00"
  6590.      If CanaleSelezionato>0
  6591.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6592.       If ColoriOriginali=True
  6593.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6594.       Else
  6595.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6596.       EndIf
  6597.       Print Str$(CanaleSelezionato)
  6598.      EndIf
  6599.      CanaleSelezionato=6:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6600.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6601.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6602.      Print Str$(CanaleSelezionato)
  6603.      Format ""
  6604.     Case 9
  6605.      Format "00"
  6606.      If CanaleSelezionato>0
  6607.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6608.       If ColoriOriginali=True
  6609.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6610.       Else
  6611.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6612.       EndIf
  6613.       Print Str$(CanaleSelezionato)
  6614.      EndIf
  6615.      CanaleSelezionato=7:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6616.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6617.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6618.      Print Str$(CanaleSelezionato)
  6619.      Format ""
  6620.     Case 10
  6621.      Format "00"
  6622.      If CanaleSelezionato>0
  6623.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6624.       If ColoriOriginali=True
  6625.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6626.       Else
  6627.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6628.       EndIf
  6629.       Print Str$(CanaleSelezionato)
  6630.      EndIf
  6631.      CanaleSelezionato=8:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6632.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6633.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6634.      Print Str$(CanaleSelezionato)
  6635.      Format ""
  6636.     Case 11
  6637.      Format "00"
  6638.      If CanaleSelezionato>0
  6639.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6640.       If ColoriOriginali=True
  6641.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6642.       Else
  6643.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6644.       EndIf
  6645.       Print Str$(CanaleSelezionato)
  6646.      EndIf
  6647.      CanaleSelezionato=9:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6648.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6649.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6650.      Print Str$(CanaleSelezionato)
  6651.      Format ""
  6652.     Case 12
  6653.      Format "00"
  6654.      If CanaleSelezionato>0
  6655.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6656.       If ColoriOriginali=True
  6657.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6658.       Else
  6659.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6660.       EndIf
  6661.       Print Str$(CanaleSelezionato)
  6662.      EndIf
  6663.      CanaleSelezionato=10:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6664.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6665.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6666.      Print Str$(CanaleSelezionato)
  6667.      Format ""
  6668.     Case 13
  6669.      Format "00"
  6670.      If CanaleSelezionato>0
  6671.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6672.       If ColoriOriginali=True
  6673.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6674.       Else
  6675.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6676.       EndIf
  6677.       Print Str$(CanaleSelezionato)
  6678.      EndIf
  6679.      CanaleSelezionato=11:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6680.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6681.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6682.      Print Str$(CanaleSelezionato)
  6683.      Format ""
  6684.     Case 14
  6685.      Format "00"
  6686.      If CanaleSelezionato>0
  6687.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6688.       If ColoriOriginali=True
  6689.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6690.       Else
  6691.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6692.       EndIf
  6693.       Print Str$(CanaleSelezionato)
  6694.      EndIf
  6695.      CanaleSelezionato=12:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6696.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6697.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6698.      Print Str$(CanaleSelezionato)
  6699.      Format ""
  6700.     Case 15
  6701.      Format "00"
  6702.      If CanaleSelezionato>0
  6703.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6704.       If ColoriOriginali=True
  6705.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6706.       Else
  6707.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6708.       EndIf
  6709.       Print Str$(CanaleSelezionato)
  6710.      EndIf
  6711.      CanaleSelezionato=13:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6712.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6713.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6714.      Print Str$(CanaleSelezionato)
  6715.      Format ""
  6716.     Case 16
  6717.      Format "00"
  6718.      If CanaleSelezionato>0
  6719.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6720.       If ColoriOriginali=True
  6721.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6722.       Else
  6723.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6724.       EndIf
  6725.       Print Str$(CanaleSelezionato)
  6726.      EndIf
  6727.      CanaleSelezionato=14:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6728.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6729.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6730.      Print Str$(CanaleSelezionato)
  6731.      Format ""
  6732.     Case 17
  6733.      Format "00"
  6734.      If CanaleSelezionato>0
  6735.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6736.       If ColoriOriginali=True
  6737.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6738.       Else
  6739.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6740.       EndIf
  6741.       Print Str$(CanaleSelezionato)
  6742.      EndIf
  6743.      CanaleSelezionato=15:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6744.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6745.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6746.      Print Str$(CanaleSelezionato)
  6747.      Format ""
  6748.     Case 18
  6749.      Format "00"
  6750.      If CanaleSelezionato>0
  6751.       WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6752.       If ColoriOriginali=True
  6753.        WColour CanaleSelezionato MOD 2+1,CanaleSelezionato MOD 2
  6754.       Else
  6755.        WColour 10+(CanaleSelezionato MOD 2)*2,9+(CanaleSelezionato MOD 2)*2
  6756.       EndIf
  6757.       Print Str$(CanaleSelezionato)
  6758.      EndIf
  6759.      CanaleSelezionato=16:Selezione{#CambiaIlCanaleDegliEventiMusicaliSelezionati}
  6760.      WLocate (CanaleSelezionato-1)*16,AltezzaInternaFinestraEditoreSequenza-8
  6761.      WColour CanaleSelezionato-1,16-CanaleSelezionato
  6762.      Print Str$(CanaleSelezionato)
  6763.      Format ""
  6764.     Case 19
  6765.      If CanaleSelezionato>0
  6766.       MostraSoloGliEventiMusicaliDelCanaleSelezionato=NOT MostraSoloGliEventiMusicaliDelCanaleSelezionato
  6767.      EndIf
  6768.     End Select
  6769.     TempoTrascorso.l=Timer
  6770.     SecondoClicDelTopo=False
  6771.    Case #TastoSinistroDelTopoRilasciato
  6772.     If Timer-TempoTrascorso>49 AND ZonaTopo=0
  6773.      Selezione{#SelezionaGliEventiMusicaliUguali}
  6774.      SecondoClicDelTopo=False
  6775.     Else
  6776.      SecondoClicDelTopo=True
  6777.     EndIf
  6778.    End Select
  6779. ;  Case #HaiPremutoUnBottone
  6780. ;   Select GadgetHit
  6781. ;   Case 1
  6782. ;    AltezzaSlider.w=AltezzaInternaFinestraEditoreSequenza-8-8
  6783. ;    YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,AltezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  6784. ;   Case 2
  6785. ;    LunghezzaSlider.w=LarghezzaInternaFinestraEditoreSequenza-16
  6786. ;    XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  6787. ;    XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6788. ;   End Select
  6789.   Case #HaiRilasciatoUnBottone
  6790.    Select GadgetHit
  6791.    Case 1
  6792.     AltezzaSlider.w=AltezzaInternaFinestraEditoreSequenza-8-8
  6793.     YInizioAreaVisibile=ValoreSlider{1,AreaInvisibileDelleNote,AltezzaSlider,"VERTICAL",#ListaGadgetEditoreSequenza}
  6794.    Case 2
  6795.     LunghezzaSlider.w=LarghezzaInternaFinestraEditoreSequenza-16
  6796.     XInizioAreaVisibile=ValoreSlider{2,AreaInvisibileDelTempo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetEditoreSequenza}
  6797.     XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6798.    End Select
  6799.    SecondoClicDelTopo=False
  6800.   Case #HaiAttivatoIlMenu
  6801.    Menu.b=MenuHit:Voce.b=ItemHit
  6802.    Select Menu
  6803.    Case 0
  6804.     Select Voce
  6805.     Case 0
  6806.      PushItem Sequenza()
  6807.      PushItem SequenzaNellaTraccia()
  6808.      PushItem EventoMusicale()
  6809.      InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallEditoreSequenza}
  6810.      EseguiGliEventiMusicali{#EseguiGliEventiMusicaliDallEditoreSequenza}
  6811.      InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallEditoreSequenza}
  6812.      PopItem EventoMusicale()
  6813.      PopItem SequenzaNellaTraccia()
  6814.      PopItem Sequenza()
  6815.     Case 1
  6816.      RegistraGliEventiMusicali{#EseguiGliEventiMusicaliDallEditoreSequenza}
  6817.     End Select
  6818.    Case 1
  6819.     Select Voce
  6820.     Case 0
  6821.      Selezione{#SelezionaTuttiGliEventiMusicali}
  6822.     Case 1
  6823.      Selezione{#DeselezionaTuttiGliEventiMusicali}
  6824.     Case 2
  6825.      Selezione{#InvertiLaSelezioneDiTuttiGliEventiMusicali}
  6826.     Case 3
  6827.      Selezione{#TagliaGliEventiMusicaliSelezionati}
  6828.     Case 4
  6829.      Selezione{#CopiaGliEventiMusicaliSelezionati}
  6830.     Case 5
  6831.      Selezione{#IncollaGliEventiMusicali}
  6832.     Case 6
  6833.      Selezione{#DimenticaGliEventiMusicaliTagliatiOCopiati}
  6834.     Case 7
  6835.      XInizioAreaVisibile=PuntoDInserimento
  6836.     End Select
  6837.    Case 2
  6838.     Select Voce
  6839.     Case 0
  6840.      TipoDiEventoMusicaleDiBase$="Note"
  6841.     Case 1
  6842.      TipoDiEventoMusicaleDiBase$="Program"
  6843.     Case 2
  6844.      TipoDiEventoMusicaleDiBase$="Control"
  6845.     Case 3
  6846.      TipoDiEventoMusicaleDiBase$="PolyAftertouch"
  6847.     Case 4
  6848.      TipoDiEventoMusicaleDiBase$="MonoAftertouch"
  6849.     Case 5
  6850.      TipoDiEventoMusicaleDiBase$="PitchBend"
  6851.     Case 6
  6852.      TipoDiEventoMusicaleDiBase$="Tempo"
  6853.     Case 7
  6854.      TipoDiEventoMusicaleDiBase$="BPM"
  6855.     Case 8
  6856.      MostraSoloGliEventiMusicaliDelloStessoTipo=NOT MostraSoloGliEventiMusicaliDelloStessoTipo
  6857.     End Select
  6858.    Case 3
  6859.     Select Voce
  6860.     Case 0
  6861.      CambiaLEventoBase{}
  6862.     Case 1
  6863.      MostraNuovoValore=NOT MostraNuovoValore
  6864.     End Select
  6865.    Case 4
  6866.     Select Voce
  6867.     Case 0
  6868.      MostraITastiDaUsare{}
  6869.     Case 1
  6870.      MostraLaMappaturaDelleNoteSullaTastiera{}
  6871.     End Select
  6872.    End Select
  6873.    SecondoClicDelTopo=False
  6874.   Case #HaiChiusoLaFinestra
  6875.    EsciDallEditoreSequenza.b=True
  6876.   Case #HaiPremutoUnTasto
  6877.    TastoPremuto$=LCase$(Inkey$):TastoRiga.w=RawKey
  6878.    If TastoPremuto$=TastoFuga$ Then EsciDallEditoreSequenza=True
  6879.    Select TastoRiga
  6880.    Case 2
  6881.     Nota$="C#2"
  6882.    Case 3
  6883.     Nota$="D#2"
  6884.    Case 5
  6885.     Nota$="F#2"
  6886.    Case 6
  6887.     Nota$="G#2"
  6888.    Case 7
  6889.     Nota$="A#2"
  6890.    Case 16
  6891.     Nota$="C2"
  6892.    Case 17
  6893.     Nota$="D2"
  6894.    Case 18
  6895.     Nota$="E2"
  6896.    Case 19
  6897.     Nota$="F2"
  6898.    Case 20
  6899.     Nota$="G2"
  6900.    Case 21
  6901.     Nota$="A2"
  6902.    Case 22
  6903.     Nota$="B2"
  6904.    Case 33
  6905.     Nota$="C#1"
  6906.    Case 34
  6907.     Nota$="D#1"
  6908.    Case 36
  6909.     Nota$="F#1"
  6910.    Case 37
  6911.     Nota$="G#1"
  6912.    Case 38
  6913.     Nota$="A#1"
  6914.    Case 49
  6915.     Nota$="C1"
  6916.    Case 50
  6917.     Nota$="D1"
  6918.    Case 51
  6919.     Nota$="E1"
  6920.    Case 52
  6921.     Nota$="F1"
  6922.    Case 53
  6923.     Nota$="G1"
  6924.    Case 54
  6925.     Nota$="A1"
  6926.    Case 55
  6927.     Nota$="B1"
  6928.    Case 80
  6929.     OttavaSelezionata=0
  6930.    Case 81
  6931.     OttavaSelezionata=1
  6932.    Case 82
  6933.     OttavaSelezionata=2
  6934.    Case 83
  6935.     OttavaSelezionata=3
  6936.    Case 84
  6937.     OttavaSelezionata=4
  6938.    Case 85
  6939.     OttavaSelezionata=5
  6940.    Case 86
  6941.     OttavaSelezionata=6
  6942.    Case 87
  6943.     OttavaSelezionata=7
  6944.    Case 88
  6945.     OttavaSelezionata=8
  6946.    Case 89
  6947.     OttavaSelezionata=9
  6948.    Default
  6949.     TastoRiga=0
  6950.    End Select
  6951.    If TastoRiga>0
  6952.     If TastoRiga<80
  6953.      AggiungiUnaNotaDallaTastiera{Nota$}
  6954.     Else
  6955.      YInizioAreaVisibile=Max(127-(127-AreaInvisibileDelleNote)-OttavaSelezionata*12,0)
  6956.     EndIf
  6957.    EndIf
  6958.    TastiShiftPremuti.b=(Qualifier-$8000) & %11
  6959.    If EventiMusicaliSelezionati>0
  6960.     If TastiShiftPremuti>0
  6961.      Select TastoPremuto$
  6962.      Case TastoBackspace$
  6963.       Selezione{#EliminaGliEventiMusicaliSelezionati}
  6964.      Case TastoCursoreSu$
  6965.       If TipoDiEventoMusicaleDiBase$="Note" Then Selezione{#AlzaDiUnOttavaLeNoteSelezionate}
  6966.       If TipoDiEventoMusicaleDiBase$="Program" Then Selezione{#AggiungiOttoAgliEventiMusicaliSelezionati}
  6967.       If TipoDiEventoMusicaleDiBase$="Control" Then Selezione{#AggiungiOttoAgliEventiMusicaliSelezionati}
  6968.       If TipoDiEventoMusicaleDiBase$="PolyAftertouch" Then Selezione{#AggiungiOttoAgliEventiMusicaliSelezionati}
  6969.       If TipoDiEventoMusicaleDiBase$="MonoAftertouch" Then Selezione{#AggiungiOttoAgliEventiMusicaliSelezionati}
  6970.       If TipoDiEventoMusicaleDiBase$="Tempo" Then Selezione{#AggiungiUnaMisuraAlTempoSelezionato}
  6971.       If TipoDiEventoMusicaleDiBase$="BPM" Then Selezione{#AggiungiDieciAgliEventiMusicaliSelezionati}
  6972.      Case TastoCursoreGiu$
  6973.       If TipoDiEventoMusicaleDiBase$="Note" Then Selezione{#AbbassaDiUnOttavaLeNoteSelezionate}
  6974.       If TipoDiEventoMusicaleDiBase$="Program" Then Selezione{#SottraiOttoAgliEventiMusicaliSelezionati}
  6975.       If TipoDiEventoMusicaleDiBase$="Control" Then Selezione{#SottraiOttoAgliEventiMusicaliSelezionati}
  6976.       If TipoDiEventoMusicaleDiBase$="PolyAftertouch" Then Selezione{#SottraiOttoAgliEventiMusicaliSelezionati}
  6977.       If TipoDiEventoMusicaleDiBase$="MonoAftertouch" Then Selezione{#SottraiOttoAgliEventiMusicaliSelezionati}
  6978.       If TipoDiEventoMusicaleDiBase$="Tempo" Then Selezione{#TogliUnaMisuraAlTempoSelezionato}
  6979.       If TipoDiEventoMusicaleDiBase$="BPM" Then Selezione{#SottraiDieciAgliEventiMusicaliSelezionati}
  6980.      Case TastoCursoreDestra$
  6981.       If TipoDiEventoMusicaleDiBase$="Note" Then Selezione{#AllungaLaDurataDelleNoteSelezionate}
  6982.      Case TastoCursoreSinistra$
  6983.       If TipoDiEventoMusicaleDiBase$="Note" Then Selezione{#RiduciLaDurataDelleNoteSelezionate}
  6984.      End Select
  6985.     Else
  6986.      Select TastoPremuto$
  6987.      Case TastoBackspace$
  6988.       If LastItem(EventoMusicale())=True
  6989.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  6990.        DurataEventoMusicale.l=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  6991.        DurataSequenza-DurataEventoMusicale
  6992.        XInizioAreaVisibile-DurataEventoMusicale
  6993.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  6994.        KillItem EventoMusicale():EventiMusicali-1
  6995.       EndIf
  6996.      Case TastoCursoreSu$
  6997.       If TipoDiEventoMusicaleDiBase$="Tempo"
  6998.        Selezione{#AggiungiUnBattitoAlTempoSelezionato}
  6999.       Else
  7000.        Selezione{#AlzaDiUnoGliEventiMusicaliSelezionati}
  7001.       EndIf
  7002.      Case TastoCursoreGiu$
  7003.       If TipoDiEventoMusicaleDiBase$="Tempo"
  7004.        Selezione{#TogliUnBattitoAlTempoSelezionato}
  7005.       Else
  7006.        Selezione{#AbbassaDiUnoGliEventiMusicaliSelezionati}
  7007.       EndIf
  7008.      Case TastoCursoreDestra$
  7009.       Selezione{#SpostaAvantiNelTempoGliEventiMusicaliSelezionati}
  7010.      Case TastoCursoreSinistra$
  7011.       Selezione{#SpostaIndietroNelTempoGliEventiMusicaliSelezionati}
  7012.      End Select
  7013.     EndIf
  7014.    Else
  7015.     If TastiShiftPremuti>0
  7016.      Select TastoPremuto$
  7017.      Case TastoBackspace$
  7018.       If LastItem(EventoMusicale())=True
  7019.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  7020.        DurataEventoMusicale=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  7021.        DurataSequenza-DurataEventoMusicale
  7022.        XInizioAreaVisibile-DurataEventoMusicale
  7023.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  7024.        KillItem EventoMusicale():EventiMusicali-1
  7025.       EndIf
  7026.      Case TastoCursoreDestra$
  7027.       PuntoDInserimento+LarghezzaEventoBase
  7028.       PuntoDInserimento=Min(PuntoDInserimento,DurataSequenza)
  7029.      Case TastoCursoreSinistra$
  7030.       PuntoDInserimento-LarghezzaEventoBase
  7031.       PuntoDInserimento=Max(PuntoDInserimento,0)
  7032.      End Select
  7033.     Else
  7034.      Select TastoPremuto$
  7035.      Case TastoBackspace$
  7036.       If LastItem(EventoMusicale())=True
  7037.        If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato Then EventiMusicaliSelezionati-1
  7038.        DurataEventoMusicale=Max(EventoMusicale()\Durata,LarghezzaEventoBase)
  7039.        DurataSequenza-DurataEventoMusicale
  7040.        XInizioAreaVisibile-DurataEventoMusicale
  7041.        XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  7042.        KillItem EventoMusicale():EventiMusicali-1
  7043.       EndIf
  7044.      Case TastoCursoreSu$
  7045.       If YInizioAreaVisibile>0 Then YInizioAreaVisibile-1
  7046.      Case TastoCursoreGiu$
  7047.       If YInizioAreaVisibile<AreaInvisibileDelleNote Then YInizioAreaVisibile+1
  7048.      Case TastoCursoreDestra$
  7049.       XInizioAreaVisibile+LarghezzaEventoBase
  7050.       XInizioAreaVisibile=Min(XInizioAreaVisibile,AreaInvisibileDelTempo)
  7051.      Case TastoCursoreSinistra$
  7052.       XInizioAreaVisibile-LarghezzaEventoBase
  7053.       XInizioAreaVisibile=Max(XInizioAreaVisibile,0)
  7054.      End Select
  7055.     EndIf
  7056.    EndIf
  7057.    If TastoPremuto$=Spazio$
  7058.     ResetList EventoMusicale()
  7059.     While NextItem(EventoMusicale())
  7060.      If EventoMusicale()\Inizio>=PuntoDInserimento
  7061.       EventoMusicale()\Inizio+LarghezzaEventoBase
  7062.      EndIf
  7063.     Wend
  7064.     PuntoDInserimento+LarghezzaEventoBase
  7065.     DurataSequenza+LarghezzaEventoBase
  7066.    EndIf
  7067.    SecondoClicDelTopo=False
  7068.   End Select
  7069.   FlushEvents
  7070.  Until EsciDallEditoreSequenza=True
  7071.  Sequenza()\EventiMusicali=EventiMusicali
  7072.  Sequenza()\EventiMusicaliSelezionati=EventiMusicaliSelezionati
  7073.  Sequenza()\Durata=Max(DurataSequenza,(#TicDiBasePerQuarto*4.0*Battiti)/Misure)
  7074.  MostraSoloGliEventiMusicaliDelloStessoTipo=False
  7075.  MostraSoloGliEventiMusicaliDelCanaleSelezionato=False
  7076.  CloseWindow #FinestraEditoreSequenza
  7077.  Use Window #FinestraPrincipale
  7078.  WJam #UnColoreConSfondoTrasparente
  7079. End Statement
  7080.  
  7081. ;------------------------------------------------------------------------------
  7082. ;questa procedura elimina tutti gli eventi musicali della sequenza selezionata
  7083. ;this procedure deletes all the events of the selected  sequence
  7084. ;-----------------------------------------------------------------
  7085. Statement EliminaTuttiGliEventiMusicaliDellaSequenza{}
  7086. SHARED DurataSequenza
  7087. SHARED EventiMusicali
  7088. SHARED EventiMusicaliSelezionati
  7089. SHARED EventoMusicale()
  7090. SHARED Sequenza()
  7091. SHARED SequenzaSelezionata
  7092.  If Sequenza()\EventiMusicali>0
  7093.   ResetList EventoMusicale()
  7094.   While NextItem(EventoMusicale())=True
  7095.    If EventoMusicale()\Sequenza=SequenzaSelezionata
  7096.     If EventoMusicale()\Stato & #EventoMusicaleSelezionato=#EventoMusicaleSelezionato
  7097.      Sequenza()\EventiMusicaliSelezionati-1
  7098.     EndIf
  7099.     EventoMusicale()\Tipo="",0,0,0,0,0,0,0:KillItem EventoMusicale()
  7100.     Sequenza()\EventiMusicali-1
  7101.    EndIf
  7102.   Wend
  7103.  EndIf
  7104.  DurataSequenza=0
  7105.  EventiMusicali=0
  7106.  EventiMusicaliSelezionati=0
  7107. End Statement
  7108.  
  7109. ;-----------------------------------------------------------
  7110. ;questa procedura cambia il nome della sequenza selezionata
  7111. ;this procedure change the selected sequence's name
  7112. ;---------------------------------------------------
  7113. Statement CambiaIlNomeDellaSequenzaSelezionata{}
  7114. SHARED Sequenza()
  7115. SHARED SequenzaSelezionata
  7116. SHARED Spazio$
  7117.  Use Window #FinestraPrincipale
  7118.  WJam #DueColoriConSfondoPieno
  7119.  WLocate 0,0:WColour 0,0:Print SPACE$(80)
  7120.  WLocate 0,0:WColour 3:Print "Please type the new name for the sequence>"
  7121.  NomeDiBaseDellaSequenzaSelezionata$="Sequence"+Spazio$+Str$(SequenzaSelezionata)
  7122.  NuovoNomeDellaSequenzaSelezionata$=Edit$(NomeDiBaseDellaSequenzaSelezionata$,80-Len(NomeDiBaseDellaSequenzaSelezionata$))
  7123.  NuovoNomeDellaSequenzaSelezionata$=StripLead$(StripTrail$(NuovoNomeDellaSequenzaSelezionata$,Asc(Spazio$)),Asc(Spazio$))
  7124.  If NuovoNomeDellaSequenzaSelezionata$<>"" Then Sequenza()\Nome=NuovoNomeDellaSequenzaSelezionata$
  7125.  WJam #UnColoreConSfondoTrasparente
  7126. End Statement
  7127.  
  7128. ;--------------------------------------------------------
  7129. ;questa procedura mostra gli eventi musicali disponibili
  7130. ;this procedure shows the available musical events
  7131. ;--------------------------------------------------
  7132. Statement MostraGliEventiMusicaliDisponibili{}
  7133. SHARED MassimoEventiMusicali
  7134. SHARED Sequenza()
  7135. SHARED SequenzaEsistente()
  7136. SHARED SequenzaNellaTraccia()
  7137. SHARED TotaleEventiMusicali
  7138.  Sequenze.l=0
  7139.  TotaleEventiMusicali=0
  7140.  ResetList SequenzaNellaTraccia()
  7141.  While NextItem(SequenzaNellaTraccia())=True
  7142.   Sequenza=SequenzaNellaTraccia()\Sequenza
  7143.   If Sequenza>0
  7144.    If SequenzaNellaTraccia()\Genitore=True
  7145.     ResetList Sequenza()
  7146.     SequenzaCorrente.l=0
  7147.     While NextItem(Sequenza())=True
  7148.      SequenzaCorrente+1
  7149.      If SequenzaCorrente=Sequenza AND Sequenza()\Durata>0
  7150.       TotaleEventiMusicali+Sequenza()\EventiMusicali
  7151.       Sequenze+1
  7152.      EndIf
  7153.     Wend
  7154.     SequenzaEsistente(Sequenza-1)=True
  7155.    EndIf
  7156.   EndIf
  7157.  Wend
  7158.  WLocate 0,0:WColour 3,0:Print MassimoEventiMusicali," events allocated, ",TotaleEventiMusicali," event"
  7159.  If TotaleEventiMusicali<>1 Then Print "s"
  7160.  Print " used, "
  7161.  If Sequenze>0
  7162.   Print Str$(Sequenze)," sequence":If Sequenze>1 Then Print "s"
  7163.  Else
  7164.   Print "no sequences"
  7165.  EndIf
  7166. End Statement
  7167.  
  7168. ;---------------------------------------------
  7169. ;questa procedura mostra la sequenza indicata
  7170. ;this procedure shows the stated sequence
  7171. ;-----------------------------------------
  7172. Statement MostraSequenza{Sequenza.l,InizioSequenza.l,DurataSequenza.l,TracciaSequenza.w,ModoDisegno.b}
  7173. SHARED AltezzaInternaFinestraPrincipale
  7174. SHARED LarghezzaInternaFinestraPrincipale
  7175. SHARED Sequenza()
  7176. SHARED TracceVisibili
  7177. SHARED XTracceVisibili
  7178. SHARED YTracceVisibili
  7179.  Y0.w=(TracciaSequenza-YTracceVisibili)*8:Y1.w=Y0+7
  7180.  If Y0>=8 AND Y1<8+TracceVisibili*8
  7181.   FineSequenza.l=InizioSequenza+DurataSequenza-1
  7182.   I.w=16+InizioSequenza-XTracceVisibili
  7183.   F.w=16+FineSequenza-XTracceVisibili
  7184.   If I>=16 AND I<LarghezzaInternaFinestraPrincipale
  7185.    InizioSequenzaVisibile.b=True
  7186.   Else
  7187.    InizioSequenzaVisibile=False
  7188.   EndIf
  7189.   If F>=16 AND F<LarghezzaInternaFinestraPrincipale
  7190.    FineSequenzaVisibile.b=True
  7191.   Else
  7192.    FineSequenzaVisibile=False
  7193.   EndIf
  7194.   If I<16 AND F>LarghezzaInternaFinestraPrincipale
  7195.    SequenzaVisibile.b=True
  7196.   Else
  7197.    If InizioSequenzaVisibile=True OR FineSequenzaVisibile=True
  7198.     SequenzaVisibile=True
  7199.    Else
  7200.     SequenzaVisibile=False
  7201.    EndIf
  7202.   EndIf
  7203.   If SequenzaVisibile=True
  7204.    X0Sequenza.w=Min(Max(I,16),LarghezzaInternaFinestraPrincipale-1)
  7205.    Y0Sequenza.w=Min(Max(Y0,8),AltezzaInternaFinestraPrincipale-1-8-8-4-7)
  7206.    X1Sequenza.w=Min(Max(F,16),LarghezzaInternaFinestraPrincipale-1)
  7207.    Y1Sequenza.w=Min(Max(Y1,8+7),AltezzaInternaFinestraPrincipale-1-8-8-4)
  7208.    ColoreSequenza.b=(Sequenza-1) MOD 16
  7209.    WBox X0Sequenza,Y0Sequenza,X1Sequenza,Y1Sequenza,ColoreSequenza
  7210.    If ModoDisegno=#SequenzaSelezionata
  7211.     Wline X0Sequenza,Y0,X1Sequenza,Y1,15-ColoreSequenza
  7212.     Wline X0Sequenza,Y1,X1Sequenza,Y0,15-ColoreSequenza
  7213.    EndIf
  7214.    If ModoDisegno=#SequenzaNonSelezionata
  7215.     Wline X0Sequenza+1,Y0Sequenza+1,X1Sequenza-1,Y0Sequenza+1,15-ColoreSequenza
  7216.     Wline X0Sequenza+1,Y1Sequenza-1,X1Sequenza-1,Y1Sequenza-1,15-ColoreSequenza
  7217.    EndIf
  7218.    If ModoDisegno=#SequenzaNonSelezionata
  7219.     If InizioSequenzaVisibile=True
  7220.      Wline I+1,Y0Sequenza+1,I+1,Y1Sequenza-1,15-ColoreSequenza
  7221.     EndIf
  7222.     If FineSequenzaVisibile=True
  7223.      Wline F-1,Y0Sequenza+1,F-1,Y1Sequenza-1,15-ColoreSequenza
  7224.     EndIf
  7225.    EndIf
  7226.    NomeSequenza$=Sequenza()\Nome
  7227.    If NomeSequenza$="" Then NomeSequenza$="Sequence "+Str$(Sequenza)
  7228.    If I>=16 OR I<LarghezzaInternaFinestraPrincipale OR F>=16 OR F<LarghezzaInternaFinestraPrincipale
  7229.     WColour 15-ColoreSequenza,ColoreSequenza
  7230.     I=Max(I,16):F=Min(F,LarghezzaInternaFinestraPrincipale-1)
  7231.     WLocate I,Y0Sequenza:Print Left$(NomeSequenza$,(F-I+1)/8)
  7232.    EndIf
  7233.   EndIf
  7234.  EndIf
  7235. End Statement
  7236.  
  7237. ;--------------------------------------------------------------
  7238. ;questa procedura mostra le sequenze nella finestra principale
  7239. ;this procedure show the sequences in the main window
  7240. ;-----------------------------------------------------
  7241. Statement MostraLeSequenze{}
  7242. SHARED FineMotivo
  7243. SHARED LarghezzaInternaFinestraPrincipale
  7244. SHARED Sequenza()
  7245. SHARED SequenzaNellaTraccia()
  7246. SHARED SequenzaSelezionata
  7247. SHARED TracceVisibili
  7248. SHARED Traccia()
  7249. SHARED XTracceVisibili
  7250. SHARED YTracceVisibili
  7251.  FineMotivo=0
  7252.  For Traccia.b=1 To TracceVisibili
  7253.   If Traccia(YTracceVisibili+Traccia-1)=False
  7254.    WLocate 16,Traccia*8:WColour 3,0:Print "Track ",Str$(YTracceVisibili+Traccia)," empty"
  7255.   Else
  7256.    ResetList SequenzaNellaTraccia()
  7257.    ResetList Sequenza()
  7258.    SequenzaCorrente.l=0
  7259.    While NextItem(SequenzaNellaTraccia())=True
  7260.     InizioSequenza.l=SequenzaNellaTraccia()\Inizio
  7261.     Sequenza.l=SequenzaNellaTraccia()\Sequenza
  7262.     TracciaSequenza.w=SequenzaNellaTraccia()\Traccia
  7263.     PosizioneTraccia.b=TracciaSequenza-YTracceVisibili
  7264.     If PosizioneTraccia>=1 AND PosizioneTraccia<=TracceVisibili
  7265.      While NextItem(Sequenza())=True
  7266.       SequenzaCorrente+1
  7267.       If SequenzaCorrente=Sequenza
  7268.        DurataSequenza.l=Sequenza()\Durata
  7269.        If DurataSequenza>0
  7270.         If Sequenza=SequenzaSelezionata Then ModoDisegno.b=#SequenzaSelezionata Else ModoDisegno=#SequenzaNonSelezionata
  7271.         MostraSequenza{Sequenza,InizioSequenza,DurataSequenza,TracciaSequenza,ModoDisegno}
  7272.         FineMotivo=Max(FineMotivo,InizioSequenza+DurataSequenza)
  7273.         Pop If:Pop If:Pop While:Pop If:Goto FineCicloRicercaSequenzaDaMostrare
  7274.        EndIf
  7275.       EndIf
  7276.      Wend
  7277.     EndIf
  7278. FineCicloRicercaSequenzaDaMostrare
  7279.    Wend
  7280.   EndIf
  7281.  Next Traccia
  7282. End Statement
  7283.  
  7284. Statement MostraSliderFinestraPrincipale{}
  7285. SHARED AreaInvisibileDelMotivo
  7286. SHARED BattutePerMinuto
  7287. SHARED FineMotivo
  7288. SHARED LarghezzaInternaFinestraPrincipale
  7289. SHARED TracceVisibili
  7290. SHARED XTracceVisibili
  7291. SHARED YTracceVisibili
  7292. ;-------------------------------------------------------------------------
  7293. ;imposta la barra di scorrimento della velocita' di esecuzione delle note
  7294. ;sets the notes execution velocity slider
  7295. ;-----------------------------------------
  7296.  MostraSlider{1,BattutePerMinuto-10,300-9,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  7297.  
  7298. ;----------------------------
  7299. ;mostra le sequenze visibili
  7300. ;shows the visible sequences
  7301. ;----------------------------
  7302.  MostraSlider{2,YTracceVisibili,#MassimoTracce-TracceVisibili,"VERTICAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  7303.  
  7304. ;-------------------------------------
  7305. ;calcola l'area invisibile del motivo
  7306. ;evaluate the motive's invisible area
  7307. ;-------------------------------------
  7308.  AreaInvisibileDelMotivo=Max(FineMotivo-(LarghezzaInternaFinestraPrincipale-16),0)
  7309.  
  7310. ;----------------------------
  7311. ;mostra le sequenze visibili
  7312. ;shows the visible sequences
  7313. ;----------------------------
  7314.  MostraSlider{3,XTracceVisibili,AreaInvisibileDelMotivo,"HORIZONTAL",#ListaGadgetPrincipale,#FinestraPrincipale}
  7315.  
  7316. End Statement
  7317.  
  7318. Statement CancellaTutto{}
  7319. SHARED DurataSequenza
  7320. SHARED EventiMusicali
  7321. SHARED EventiMusicaliSelezionati
  7322. SHARED EventoMusicale()
  7323. SHARED Sequenza()
  7324. SHARED SequenzaEsistente()
  7325. SHARED SequenzaNellaTraccia()
  7326. SHARED SequenzaSelezionata
  7327. SHARED Suono()
  7328. SHARED Traccia()
  7329.  ResetList EventoMusicale()
  7330.  While NextItem(EventoMusicale())=True
  7331.   EventoMusicale()\Tipo="",0,0,0,0,0,0,0:KillItem EventoMusicale()
  7332.  Wend
  7333.  ClearList EventoMusicale()
  7334.  ResetList Sequenza()
  7335.  While NextItem(Sequenza())=True
  7336.   Sequenza()\Nome="",0,0,0:KillItem Sequenza()
  7337.  Wend
  7338.  ResetList SequenzaNellaTraccia()
  7339.  While NextItem(SequenzaNellaTraccia())=True
  7340.   SequenzaNellaTraccia()\Sequenza=0,0,0,0:KillItem SequenzaNellaTraccia()
  7341.  Wend
  7342.  ClearList Sequenza()
  7343.  ClearList SequenzaNellaTraccia()
  7344.  For Traccia.w=0 To #MassimoTracce-1
  7345.   Traccia(Traccia)=False
  7346.  Next Traccia
  7347.  For SequenzaEsistente.l=0 To #MassimoSequenze-1
  7348.   SequenzaEsistente(SequenzaEsistente)=0
  7349.   Next SequenzaEsistente
  7350.   For Suono.b=0 To 31
  7351.    Suono(Suono)\Nome="",0
  7352.   Next Suono
  7353.   DurataSequenza=0
  7354.   EventiMusicali=0
  7355.   EventiMusicaliSelezionati=0
  7356.   SequenzaSelezionata=0
  7357. End Statement
  7358.  
  7359. ;*********************************************
  7360. ;fine delle procedure ed inizio del programma
  7361. ;procedures end and program start
  7362. ;*********************************
  7363.  
  7364. ;----------------------------------------------------
  7365. ;questo programma puo' essere lanciato dal Workbench
  7366. ;this program can be launched from Workbench
  7367. ;_-------------------------------------------
  7368. WBStartup
  7369.  
  7370. BlitMode CookieMode
  7371.  
  7372. ;calculates the frequency and the AMIGA voice period for all the 128 notes
  7373. CalcolaLaFrequenzaEdIlPeriodoDelleNote{}
  7374.  
  7375. ;loads the Topaz8 font
  7376. CaricaLaFonteDiCaratteriTopaz8{}
  7377.  
  7378. ;sets the AMIGA speech
  7379. ImpostaIlParlatoDellAmiga{}
  7380.  
  7381. ;loads note images for the basic event window
  7382. CaricaLeImmaginiDelleNote{}
  7383.  
  7384. ;creates the background bitmap
  7385. CreaLaBitmapPerLImmagineDiSfondo{}
  7386.  
  7387. ;sets the screen
  7388. ImpostaLoSchermo{}
  7389.  
  7390. ;loads the background pic into its bitmap
  7391. CaricaLImmagineDiSfondoNellaBitmap{}
  7392.  
  7393. ;loads the loaded LoadedMIDIFiles history
  7394. CaricaLaStoriaDeiFileMIDIAperti{}
  7395.  
  7396. ;sets the main window
  7397. ImpostaLaFinestraPrincipale{}
  7398.  
  7399. ;sets the main window menu
  7400. ImpostaIlMenuDellaFinestraPrincipale{}
  7401.  
  7402. ;puts the background pic into the main window
  7403. MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  7404.  
  7405. ;shows the main window' sliders
  7406. MostraSliderFinestraPrincipale{}
  7407.  
  7408. ;--------------------------------------------------------------------------
  7409. ;copia in memoria lo sfondo della posizione a video dell'indicazione delle
  7410. ; battute per minuto
  7411. ;copies into memory the measures per minute indication's on screen position
  7412. ; background
  7413. ;------------
  7414.  CopiaLoSfondoSottoAlleBattutePerMinuto{}
  7415.  
  7416. ;------------------------------------------------------------------------------
  7417. ;copia in memoria lo sfondo della posizione a video dell'indicazione del tempo
  7418. ;copies into memory the time indication's on screen position background
  7419. ;-----------------------------------------------------------------------
  7420.  CopiaLoSfondoSottoAlTempo{}
  7421.  
  7422. ;shows the sequences
  7423. MostraLeSequenze{}
  7424.  
  7425. ;shows the execution velocity in bars per minute
  7426.  MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7427.  
  7428. ;shows the metronomic time
  7429.  MostraIlTempo{#BattitiDiBase-1+EsponenteDiDue{#MisureDiBase}*16,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7430.  
  7431. If ParlatoAttivato=True Then Speak "Welcome to AmySequencer!"
  7432.  
  7433. ;activates MIDI
  7434. AttivaMIDI{}
  7435.  
  7436. ;-----------------
  7437. ;clclo principale
  7438. ;main loop
  7439. ;----------
  7440. Repeat
  7441.  
  7442.  If SecondoClicDelTopo.b=False
  7443.   MettiLImmagineDiSfondoNellaFinestraPrincipale{}
  7444.   PushItem Sequenza()
  7445.   PushItem SequenzaNellaTraccia()
  7446.   PushItem EventoMusicale()
  7447.   MostraGliEventiMusicaliDisponibili{}
  7448.   MostraLeSequenze{}
  7449.   PopItem EventoMusicale()
  7450.   PopItem SequenzaNellaTraccia()
  7451.   PopItem Sequenza()
  7452.   MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7453.   MostraIlTempo{Battiti-1+EsponenteDiDue{Misure}*16,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7454.   MostraSliderFinestraPrincipale{}
  7455.   SecondoClicDelTopo=True
  7456.  EndIf
  7457.  
  7458.  If NoteSuonate>0
  7459.   If NoteSuonate=1 Then Messaggio$="There is a note" Else Messaggio$="There are "+Str$(NoteSuonate)+" notes"
  7460.   Messaggio$+" still playing:|clicking on OK you will stop "
  7461.   If NoteSuonate=1 Then Messaggio$+"this." Else Messaggio$+"these."
  7462.   EZRequest "AmySequencer message",Messaggio$,"OK"
  7463.   InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7464.   NoteSuonate=0
  7465.  EndIf
  7466.  
  7467. ;--------------------------------------------------------------
  7468. ;questa variabile cattura gli eventi della finestra principale
  7469. ;this variable catch main window events
  7470. ;---------------------------------------
  7471.  EventoFinestraPrincipale.l=WaitEvent
  7472.  
  7473.  Select EventoFinestraPrincipale
  7474.  
  7475. ;------------------------------------
  7476. ;se avete premuto un tasto del mouse
  7477. ;if you have pressed a mouse button
  7478. ;-----------------------------------
  7479.  Case #HaiPremutoUnTastoDelTopo
  7480.   XTopo=WMouseX:YTopo=WMouseY:TastoDelTopoCliccato=MButtons
  7481.   Select TastoDelTopoCliccato
  7482.   Case #TastoSinistroDelTopoPremuto
  7483.    If YTopo>=8 AND YTopo<8+TracceVisibili*8
  7484.     TracciaSelezionata.w=YTopo/8+YTracceVisibili
  7485.     ResetList SequenzaNellaTraccia()
  7486.     SequenzaSelezionata=0
  7487.     While NextItem(SequenzaNellaTraccia())=True
  7488.      TracciaSequenza.w=SequenzaNellaTraccia()\Traccia
  7489.      If TracciaSequenza=TracciaSelezionata
  7490.       Sequenza=SequenzaNellaTraccia()\Sequenza
  7491.       InizioSequenza.l=SequenzaNellaTraccia()\Inizio
  7492.       ResetList Sequenza()
  7493.       SequenzaCorrente.l=0
  7494.       While NextItem(Sequenza())=True
  7495.        SequenzaCorrente+1
  7496.        If SequenzaCorrente=Sequenza
  7497.         DurataSequenza.l=Sequenza()\Durata
  7498.         If DurataSequenza>0
  7499.          FineSequenza.l=InizioSequenza+DurataSequenza-1
  7500.          I.w=InizioSequenza-XTracceVisibili
  7501.          F.w=FineSequenza-XTracceVisibili
  7502.          If XTopo>=I AND XTopo<=F
  7503.           SequenzaSelezionata=Sequenza
  7504.           Pop If:Pop If:Pop If:Pop While:Pop If:Pop While
  7505.           Goto FineRicercaSequenzaSelezionata
  7506.          EndIf
  7507.         EndIf
  7508.        EndIf
  7509.       Wend
  7510.      EndIf
  7511.     Wend
  7512.     For Sequenza=1 To SequenzaMassimaDaCreare
  7513.      If SequenzaEsistente(Sequenza-1)=False
  7514.       Pop If:Pop For:Goto FineRicercaSequenzaDaAggiungere
  7515.      EndIf
  7516.     Next Sequenza
  7517. FineRicercaSequenzaDaAggiungere
  7518.     LastItem Sequenza()
  7519.     LastItem SequenzaNellaTraccia()
  7520.     If AddItem(Sequenza())=True AND AddItem(SequenzaNellaTraccia())=True
  7521.      SequenzaNellaTraccia()\Sequenza=Sequenza
  7522.      SequenzaNellaTraccia()\Traccia=TracciaSelezionata
  7523.      SequenzaNellaTraccia()\Inizio=XTracceVisibili+XTopo-16
  7524.      SequenzaNellaTraccia()\Genitore=True
  7525.      Sequenza()\Durata=(#TicDiBasePerQuarto*4.0*Battiti)/Misure
  7526.      SequenzaEsistente(Sequenza-1)=True
  7527.      Traccia(TracciaSelezionata-1)=True
  7528.      If Sequenza=SequenzaMassimaDaCreare Then SequenzaMassimaDaCreare+1
  7529.     Else
  7530.      EZRequest "AmySequencer message","You have used all|the available sequences","OK"
  7531.     EndIf
  7532. FineRicercaSequenzaSelezionata
  7533.    EndIf
  7534.    If YTopo>AltezzaInternaFinestraPrincipale-1-8-8 AND YTopo<AltezzaInternaFinestraPrincipale-8
  7535.     If XTopo>LarghezzaInternaFinestraPrincipale-Len("Tempo=00/000")*8
  7536.      CambiaLaMisuraDelTempo{}
  7537.      MostraIlTempo{Battiti-1+EsponenteDiDue{Misure}*16,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7538.     EndIf
  7539.    EndIf
  7540.    SecondoClicDelTopo=False
  7541.   Case #TastoSinistroDelTopoRilasciato
  7542.    SecondoClicDelTopo=True
  7543.   End Select
  7544. ;---------------------------
  7545. ;se avete premuto un gadget
  7546. ;if you have pressed a gadget
  7547. ;-----------------------------
  7548. ; Case #HaiPremutoUnBottone
  7549. ;  Select GadgetHit
  7550. ;  Case 1
  7551. ;   LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  7552. ;   BattutePerMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  7553. ;   TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  7554. ;  Case 2
  7555. ;   AltezzaSlider.w=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  7556. ;   YTracceVisibili=ValoreSlider{2,#MassimoTracce-TracceVisibili,LunghezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  7557. ;  Case 3
  7558. ;   LunghezzaSlider=LarghezzaInternaFinestraPrincipale-16
  7559. ;   XTracceVisibili=ValoreSlider{3,AreaInvisibileDelMotivo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  7560. ;  End Select
  7561. ;  SecondoClicDelTopo=False
  7562.  
  7563. ;------------------------------
  7564. ;se avete rilasciato un gadget
  7565. ;if you have released a gadget
  7566. ;------------------------------
  7567.  Case #HaiRilasciatoUnBottone
  7568.   BarraDiScorrimento.b=GadgetHit
  7569.   Select BarraDiScorrimento
  7570.   Case 1
  7571.    LunghezzaSlider.w=LarghezzaInternaFinestraPrincipale
  7572.    BattutePerMinuto=10+ValoreSlider{1,300-9,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  7573.    TicPerCinquantesimoDiSecondo=(BattutePerMinuto*#TicDiBasePerQuarto*4.0)/3000
  7574.   Case 2
  7575.    AltezzaSlider.w=AltezzaSchermo-(AltezzaFonte+3)-8-8-8
  7576.    YTracceVisibili=ValoreSlider{2,#MassimoTracce-TracceVisibili,AltezzaSlider,"VERTICAL",#ListaGadgetPrincipale}
  7577.   Case 3
  7578.    LunghezzaSlider=LarghezzaInternaFinestraPrincipale-16
  7579.    XTracceVisibili=ValoreSlider{3,AreaInvisibileDelMotivo,LunghezzaSlider,"HORIZONTAL",#ListaGadgetPrincipale}
  7580.   End Select
  7581.   SecondoClicDelTopo=False
  7582.  
  7583. ;--------------------------------------
  7584. ;se avete attivato il menu' principale
  7585. ;if you have activated main menu
  7586. ;--------------------------------
  7587.  Case #HaiAttivatoIlMenu
  7588.  
  7589.   MenuScelto.b=MenuHit
  7590.   VoceScelta.b=ItemHit
  7591.  
  7592.   Select MenuScelto
  7593.   Case 0
  7594.    Select VoceScelta
  7595.    Case 0
  7596.     CancellaTutto{}
  7597.    Case 1
  7598.     CancellaTutto{}
  7599.     PrimoFileMIDICaricatoPrima$=FileMIDIAperto$(0)
  7600.     CaricaUnFileMIDI{""}
  7601.     CaricaLaStoriaDeiFileMIDIAperti{}
  7602.     PrimoFileMIDICaricatoDopo$=FileMIDIAperto$(0)
  7603.     If PrimoFileMIDICaricatoPrima$<>PrimoFileMIDICaricatoDopo$ Then ImpostaIlMenuDellaFinestraPrincipale{}
  7604.    End Select
  7605.    If VoceScelta>3 AND VoceScelta<VoceMenuEsci
  7606.     NomeDelFileMIDI$=FileMIDIAperto$(VoceScelta-4)
  7607.     CaricaUnFileMIDI{NomeDelFileMIDI$}
  7608.    EndIf
  7609.   Case 1
  7610.    Select VoceScelta
  7611.    Case 0
  7612.     PushItem Sequenza()
  7613.     PushItem SequenzaNellaTraccia()
  7614.     PushItem EventoMusicale()
  7615.     InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7616.     EseguiGliEventiMusicali{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7617.     InterrompiTutteLeNote{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7618.     PopItem EventoMusicale()
  7619.     PopItem SequenzaNellaTraccia()
  7620.     PopItem Sequenza()
  7621.     MostraLeBattutePerMinuto{BattutePerMinuto,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7622.     MostraIlTempo{Battiti-1+EsponenteDiDue{Misure}*16,0,#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7623.    Case 1
  7624.     RegistraGliEventiMusicali{#EseguiGliEventiMusicaliDallaFinestraPrincipale}
  7625.    End Select
  7626.   Case 2
  7627.    If SequenzaSelezionata>0
  7628.     Select VoceScelta
  7629.     Case 0
  7630.      EditoreSequenza{}
  7631.     Case 1
  7632.      CambiaIlNomeDellaSequenzaSelezionata{}
  7633.     End Select
  7634.    Else
  7635.     EZRequest "AmySequencer message","You must select a sequence first","OK"
  7636.    EndIf
  7637.   Case 3
  7638.    If VoceScelta=0 Then EditoreSuoni{}
  7639.   Case 4
  7640.    Select VoceScelta
  7641.    Case 0
  7642.     AttivaMIDI{}
  7643.    Case 1
  7644.     ColoriOriginali=NOT ColoriOriginali
  7645.     CaricaLImmagineDiSfondoNellaBitmap{}
  7646.     CopiaLoSfondoSottoAlleBattutePerMinuto{}
  7647.     CopiaLoSfondoSottoAlTempo{}
  7648.    Case 2
  7649.     If Exists("LoadedMIDIFilesHistory")
  7650.      CancellaLaStoriaDeiFileMIDIAperti{}
  7651.      ImpostaIlMenuDellaFinestraPrincipale{}
  7652.     EndIf
  7653.    End Select
  7654.   End Select
  7655.  
  7656. ;-------------------------------------------------------------------
  7657. ;se avete scelto la voce Quit dal menu' Project attiva la variabile
  7658. ; EsciDalProgramma
  7659. ;if you have selected voice Quit from Project menu activates EsciDalProgramma
  7660. ; flag
  7661. ;------
  7662.   If MenuScelto=0 AND VoceScelta=VoceMenuEsci Then EsciDalProgramma=True
  7663.  
  7664.   SecondoClicDelTopo=False
  7665.  
  7666. ;--------------------------
  7667. ;se avete premuto un tasto
  7668. ;if you have pressed a key
  7669. ;--------------------------
  7670.  Case #HaiPremutoUnTasto
  7671.  
  7672. ;--------------------------------------------
  7673. ;questa variabile memorizza il tasto premuto
  7674. ;this variable stores the key pressed
  7675. ;-------------------------------------
  7676.   TastoPremuto$=LCase$(Inkey$)
  7677.  
  7678.   Select TastoPremuto$
  7679.  
  7680. ;-------------------------------------------------------------------
  7681. ;se avete premuto il tasto Esc attiva la variabile EsciDalProgramma
  7682. ;if you have typed Esc key activates EsciDalProgramma flag
  7683. ;----------------------------------------------------------
  7684.   Case TastoFuga$
  7685.    EsciDalProgramma=True
  7686.  
  7687.   Case TastoBackspace$
  7688.    If SequenzaSelezionata>0
  7689.     TracciaDellaSequenzaEliminata.w=SequenzaNellaTraccia()\Traccia
  7690.     SequenzaNellaTraccia()\Sequenza=0,0,0,0
  7691.     KillItem SequenzaNellaTraccia()
  7692.     ResetList SequenzaNellaTraccia()
  7693.     SequenzaCorrente=0
  7694.     TracciaConSequenza.b=False
  7695.     While NextItem(SequenzaNellaTraccia())=True
  7696.      If SequenzaNellaTraccia()\Sequenza=SequenzaSelezionata
  7697.       SequenzaCorrente+1
  7698.       If SequenzaCorrente=1
  7699.        SequenzaNellaTraccia()\Genitore=True
  7700.       Else
  7701.        SequenzaNellaTraccia()\Genitore=SequenzaSelezionata
  7702.       EndIf
  7703.      EndIf
  7704.      If SequenzaNellaTraccia()\Traccia=TracciaDellaSequenzaEliminata
  7705.       TracciaConSequenza=True
  7706.      EndIf
  7707.     Wend
  7708.     If SequenzaCorrente=0
  7709.      EliminaTuttiGliEventiMusicaliDellaSequenza{}
  7710.      Sequenza()\Nome="",0,0,0
  7711.      KillItem Sequenza()
  7712.      SequenzaEsistente(SequenzaSelezionata-1)=False
  7713.     EndIf
  7714.     If TracciaConSequenza=False Then Traccia(TracciaDellaSequenzaEliminata-1)=False
  7715.     If LastItem(SequenzaNellaTraccia())=True
  7716.      If SequenzaNellaTraccia()\Sequenza>SequenzaSelezionata
  7717.       SequenzaEsistente(SequenzaNellaTraccia()\Sequenza-1)=False
  7718.       Repeat
  7719.        If SequenzaNellaTraccia()\Sequenza>SequenzaSelezionata
  7720.         PushItem SequenzaNellaTraccia()
  7721.         If PrevItem(SequenzaNellaTraccia())=True
  7722.          If SequenzaNellaTraccia()\Sequenza>SequenzaSelezionata
  7723.           Sequenza=SequenzaNellaTraccia()\Sequenza
  7724.          Else
  7725.           Sequenza=SequenzaSelezionata
  7726.          EndIf
  7727.          PopItem SequenzaNellaTraccia()
  7728.          SequenzaNellaTraccia()\Sequenza=Sequenza
  7729.         Else
  7730.          PopItem SequenzaNellaTraccia()
  7731.          SequenzaNellaTraccia()\Sequenza=SequenzaSelezionata
  7732.         EndIf
  7733.         PrevItem SequenzaNellaTraccia()
  7734.        EndIf
  7735.       Until SequenzaNellaTraccia()\Sequenza<=SequenzaSelezionata
  7736.      EndIf
  7737.     EndIf
  7738.     SequenzaSelezionata=0
  7739.    Else
  7740.     EZRequest "AmySequencer message","You must select a sequence first","OK"
  7741.    EndIf
  7742.   Case TastoCursoreSu$
  7743.    If YTracceVisibili>0 Then YTracceVisibili-1
  7744.   Case TastoCursoreGiu$
  7745.    If YTracceVisibili<#MassimoTracce-TracceVisibili Then YTracceVisibili+1
  7746.   Case TastoCursoreDestra$
  7747.    If XTracceVisibili<AreaInvisibileDelMotivo
  7748.     XTracceVisibili+LarghezzaEventoBase
  7749.     XTracceVisibili=Min(XTracceVisibili,AreaInvisibileDelMotivo)
  7750.    EndIf
  7751.   Case TastoCursoreSinistra$
  7752.    If XTracceVisibili>0
  7753.     XTracceVisibili-LarghezzaEventoBase
  7754.     XTracceVisibili=Max(XTracceVisibili,0)
  7755.    EndIf
  7756.   End Select
  7757.   SecondoClicDelTopo=False
  7758.  
  7759.  End Select
  7760.  FlushEvents
  7761.  
  7762. ;----------------------------------------------------------------
  7763. ;ripete il ciclo se la variabile EsciDalProgramma e' disattivata
  7764. ;repeats loop if EsciDalProgramma flag is deactivated
  7765. ;-----------------------------------------------------
  7766. Until EsciDalProgramma=True
  7767.  
  7768. CancellaTutto{}
  7769.  
  7770. If MIDIAttivato=True Then CloseSerial 0
  7771.  
  7772. ;-------------------
  7773. ;fine del programma
  7774. ;program end
  7775. ;------------
  7776. End
  7777.